Spring集成:具有多个JMS的线程安全入站网关共享相同的通道

时间:2014-08-14 18:06:09

标签: spring spring-integration

我有两个jms:入站网关侦听两个不同的队列管理器/队列但共享相同的入站/错误/出站通道。一旦获取并处理了消息,网关就必须基于JMSReplyTo报头进行响应(处理方式与我们在不同主机上具有队列管理器的方式相同)。由于outbond通道相同,网关如何区分要发送的响应队列。所以问题是网关是否保留了自己的频道实例?如果不是,我应该为两个网关设置不同的入站/错误/出站通道集,以便发送方获得正确的响应或是否有更好的解决方案。请指教。

<int-jms:inbound-gateway id="test1"
    request-channel="inbouldChannel"
    reply-channel="outboundChannel"
    error-channel="errorChannel"
    header-mapper="headerMapper"
    container="listenerContainer1"/>

<int-jms:inbound-gateway id="test2"
    request-channel="inbouldChannel"
    reply-channel="outboundChannel"
    error-channel="errorChannel"
    header-mapper="headerMapper"
    container="listenerContainer2"/>

1 个答案:

答案 0 :(得分:1)

他们使用相同的请求通道实例;但是他们在replyChannel标题中为每条消息添加了一个唯一的临时回复频道。

您应该忽略网关上的reply-channel属性,并且不要在处理邮件的最后一个端点上提供output-channel。然后,框架将使用标头将回复路由到正确的网关。

即使使用了您的配置,它实际上也能正常工作(因为最终它会在任何网关收到回复的情况下桥接到标头通道)但在两个网关上看起来都很奇怪。{/ 1}}。 p>

最干净的解决方案是省略该属性,让框架负责路由。