首页 文章

Spring集成 - 在集群中有1个消息驱动通道适配器

提问于
浏览
1

Issue:

将1个活动MDP(下面的jmsIn)连接到单个队列,并将服务器2上的第二个群集MDP保持为被动状态 . 我只需要一个活动进程,因为我想执行聚合而不是丢失消息 .

我一直在阅读有关控制总线的信息,但由于它是一个集群环境,因此通道ID和jms:message-driven-channel-adapter id将在两台服务器上都有保存名称 . 是否可以使用JMX在另一台服务器上停用控制总线,即使它们具有id?或者可能首先由消息驱动通道适配器进行检查,以确定队列本身是否已经有活动连接 .

Message-driven-channel-adapter Sample Code:

<jms:message-driven-channel-adapter id="jmsIn"
        destination="requestQueue"
        channel="jmsInChannel" />

<channel id="jmsInChannel" />


<beans:beans profile="default">
    <stream:stdout-channel-adapter id="stdout" channel="jmsInChannel" append-newline="true"/>
</beans:beans>

<beans:beans profile="testCase">

    <bridge input-channel="jmsInChannel" output-channel="queueChannel"/>

    <channel id="queueChannel">
        <queue />
    </channel>

</beans:beans>

1 回答

  • 0
    • 没有理由担心 <message-driven-channel-adapter>clustered singleton ,因为任何排队系统(如JMS)都是针对特定消息的单个消费者而设计的 . 换句话说,独立于队列上的进程数量,只有其中一个接收消息并处理它 .

    • JMS上的事务语义可以帮助您丢失消息 . 如果存在一些异常,TX rallbacks和消息将返回到队列,并且可以被另一个消费者接收 .

    • 对于聚合器,您确实可以使用一些分布式持久性MessageStore . 所有消费者将其消息发送到同一个 <aggregator> 组件,该组件只处理共享 MS 以执行其自己的聚合逻辑 .

相关问题