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

时间:2013-12-09 14:26:30

标签: java jms ems

我在java中有一个客户端,它在队列中发送一条jms消息(“queue-request”)。该消息包含一个int属性(“id”),其中包含唯一的客户端ID号。消息正在被处理,而不是落在另一个队列中(“队列响应”)。如何让客户端等到带有id的消息进入队列然后读出来。 我试图使用一个监听器并实现onMessage但是如何在收到消息时停止监听?

2 个答案:

答案 0 :(得分:1)

可以使用JMSReplyTo获取JMS同步。 使用相同会话发送原始消息时创建临时队列。 开始侦听临时队列并将原始消息JMSReply设置为TmpQueue。

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

完整的示例代码可以在

中找到

http://jmsexample.zcage.com/

答案 1 :(得分:0)

在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收到消息,则其他未订阅此队列的侦听器将不会接收该消息。