[英]read jms message from queue using selector
我在Java中有一个客户端,该客户端在队列中发送jms消息(“队列请求”)。 该消息包含一个int属性(“ id”),其中包含唯一的客户端ID号。 该邮件正在处理中,然后进入另一个队列(“排队响应”)。 如何让客户端等待直到具有其ID的消息在队列中,然后将其读出。 我试图使用侦听器并实现onMessage,但是如何在接收到消息时停止监听呢?
可以使用JMSReplyTo实现JMS同步。 在发送具有相同会话的原始消息时创建“临时队列”。 开始侦听临时队列,并将原始消息JMSReply设置为TmpQueue。
使用TempQueue Receiver.receive()使线程等待(同步)
完整的示例代码可以在下面找到
在JMS中,您需要为队列指定侦听器,以便在发送消息时选择特定的侦听器以接收消息。 在Spring中,您可以在Bean配置文件中指定侦听器,例如:
<bean id="myListener" class="mypackage.MyMessageListener" />
<bean id="queueBean" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="Queue-Request"/>
</bean>
<bean id="myListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactoryBean" />
<property name="destination" ref="queueBean" />
<property name="messageListener" ref="myListener" />
</bean>
然后,您可以编写类MyMessageListener
来实现MessageListener
接口:
public class MyMessageListener implements MessageListener {
public void onMessage(Message message) {
//handle message here ...
}
}
这将确保MyMessageListener
将获取从队列发送的消息。 请注意,Queue是p2p,因此,如果MyMessageListener
接收到该消息,则其他未订阅此队列的侦听器将不会接收到该消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.