0

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

4

2 回答 2

1

JMS 同步可以使用 JMSReplyTo 来实现。在使用同一会话发送原始消息时创建临时队列。启动 Listen the Temp Queue 并将 Original Message JMSReplyTo 设置为 TmpQueue。

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

完整的示例代码可以在

http://jmsexample.zcage.com/

于 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 回答