我在java中有一个客户端,它在队列中发送一条jms消息(“queue-request”)。该消息包含一个包含唯一客户端 ID 号的 int 属性(“id”)。消息正在处理中,然后进入另一个队列(“队列响应”)。如何让客户端等到带有他的id的消息在队列中,然后再读出来。我尝试使用侦听器并实现 onMessage 但是收到消息后如何停止侦听?
问问题
1385 次
2 回答
1
JMS 同步可以使用 JMSReplyTo 来实现。在使用同一会话发送原始消息时创建临时队列。启动 Listen the Temp Queue 并将 Original Message JMSReplyTo 设置为 TmpQueue。
使用 TempQueue Receiver.receive() 使线程等待(同步)
完整的示例代码可以在
于 2013-12-09T15:16:45.280 回答
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
将获得从队列发送的消息。注意队列是p2p的,所以如果消息是由MyMessageListener
接收的,其他不订阅该队列的监听器将不会接收到该消息。
于 2013-12-10T16:52:52.430 回答