JMS ReplyTo - 它是如何工作的?

时间:2012-01-13 05:27:07

标签: java-ee jms

JMS API允许消息声明replyTo Destination实例。 (即QueueTopic的超类。然后,服务可以使用此队列向发件人发送回复消息。

对于Destination可以设置为ReplyTo值有什么限制吗?这似乎不太可行,因为该服务甚至可能没有到定义的Destination的任何网络路由,因此无法返回任何消息。 JMS是否以某种方式断言所提供的Destination的有效性(可达性)?或者仅仅是服务尝试响应给定的Destination并在必要时失败。

1 个答案:

答案 0 :(得分:12)

情景1

在这种情况下,Destination已预先配置,因此证明可行。将此目标设置为JMSReplyTo标头的值没有太大价值,因为接收方可能已经知道此预配置目标的存在。

场景2

在这种情况下,发件人会创建一个临时目标,接收方只会通过调用收到的getJMSReplyTo()上的Message方法来了解这一点。这种建立发送方和接收方之间的私有信道。 Read this nice article关于临时目的地的利弊。

示例代码

Queue tempQueue = qSession.createTemporaryQueue();
TextMessage request = qSession.createTextMessage();
request.setJMSReplyTo(tempQueue);
QueueReceiver qReceiver = qSession.createReceiver(tmpQueue);
Message response = qReceiver.receive();