问题描述
是否可以将多个 JMS 侦听器连接到 MQ 队列,并且侦听器根据 Id(可能是主机名)获取消息。
在发送消息时(设置此 id?)并且在订阅时我们可以使用此 id 设置订阅者。代理的另一端将处理消息,并在响应时设置此 ID,以便特定的侦听器处理响应。
每个 msg 上的 MessageId/CorrId 将在发送/接收模式下工作,但这不是我在这里查看的内容,因为我正在使用 msg 侦听器。
浏览了 IBM MQ 文档,但无法弄清楚这一点。请提供解决此问题的任何文档参考/代码示例。
解决方法
您可以使用“选择器”创建您的 javax.jms.MessageConsumer
,例如,使用 javax.jms.Session.createConsumer(Destination,String)
然后当您在此消费者上实现 set your javax.jms.MessageListener
时,它只会接收具有匹配属性值的消息那个选择器。
因此,您可以在发送消息时为消息设置一个名为 color
的属性,然后您的消费者可以使用像 color = 'red'
这样的选择器。消费者只会收到其 color
属性值为 red
的消息。
消息选择器(包括语法和匹配语义)在 the JavaDoc 中有详细讨论。