我有两个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"/>
答案 0 :(得分:1)
他们使用相同的请求通道实例;但是他们在replyChannel
标题中为每条消息添加了一个唯一的临时回复频道。
您应该忽略网关上的reply-channel
属性,并且不要在处理邮件的最后一个端点上提供output-channel
。然后,框架将使用标头将回复路由到正确的网关。
即使使用了您的配置,它实际上也能正常工作(因为最终它会在任何网关收到回复的情况下桥接到标头通道)但在两个网关上看起来都很奇怪。{/ 1}}。 p>
最干净的解决方案是省略该属性,让框架负责路由。