繁体   English   中英

使用选择器从队列中读取JMS消息

[英]read jms message from queue using selector

我在Java中有一个客户端,该客户端在队列中发送jms消息(“队列请求”)。 该消息包含一个int属性(“ id”),其中包含唯一的客户端ID号。 该邮件正在处理中,然后进入另一个队列(“排队响应”)。 如何让客户端等待直到具有其ID的消息在队列中,然后将其读出。 我试图使用侦听器并实现onMessage,但是如何在接收到消息时停止监听呢?

可以使用JMSReplyTo实现JMS同步。 在发送具有相同会话的原始消息时创建“临时队列”。 开始侦听临时队列,并将原始消息JMSReply设置为TmpQueue。

使用TempQueue Receiver.receive()使线程等待(同步)

完整的示例代码可以在下面找到

http://jmsexample.zcage.com/

在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM