我在java中有一个客户端,它在队列中发送一条jms消息(“queue-request”)。该消息包含一个int属性(“id”),其中包含唯一的客户端ID号。消息正在被处理,而不是落在另一个队列中(“队列响应”)。如何让客户端等到带有id的消息进入队列然后读出来。 我试图使用一个监听器并实现onMessage但是如何在收到消息时停止监听?
答案 0 :(得分:1)
可以使用JMSReplyTo获取JMS同步。 使用相同会话发送原始消息时创建临时队列。 开始侦听临时队列并将原始消息JMSReply设置为TmpQueue。
使用TempQueue Receiver.receive()使线程等待(同步)
完整的示例代码可以在
中找到答案 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
收到消息,则其他未订阅此队列的侦听器将不会接收该消息。