JMS API允许消息声明replyTo Destination
实例。 (即Queue
,Topic
的超类。然后,服务可以使用此队列向发件人发送回复消息。
对于Destination
可以设置为ReplyTo值有什么限制吗?这似乎不太可行,因为该服务甚至可能没有到定义的Destination
的任何网络路由,因此无法返回任何消息。 JMS是否以某种方式断言所提供的Destination
的有效性(可达性)?或者仅仅是服务尝试响应给定的Destination
并在必要时失败。
答案 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();