JMS ReplyTo - Как это работает? - PullRequest
14 голосов
/ 13 января 2012

JMS API позволяет сообщениям объявлять экземпляр replyTo Destination.(т.е. суперкласс Queue, Topic).Служба может затем отправить ответное сообщение отправителю, используя эту очередь.

Существуют ли какие-либо ограничения на то, что Destination может быть установлено в качестве значения ReplyTo?Это кажется маловероятным, поскольку служба может даже не иметь какого-либо сетевого маршрута к определенному Destination и, следовательно, не может вернуть какое-либо сообщение.Утверждает ли JMS действительность (достижимость) предоставленного Destination?Или же это просто служба пытается ответить на данный Destination и потерпеть неудачу в случае необходимости.

1 Ответ

13 голосов
/ 13 января 2012

Сценарий 1

В этом сценарии Destination предварительно настроен и, следовательно, доказал свою работоспособность.Нет большого значения для установки этого пункта назначения в качестве значения для заголовка JMSReplyTo, так как получатель может уже знать о существовании этого предварительно сконфигурированного пункта назначения.

В этом сценарии отправитель создает временный пункт назначения, а получатель узнает об этом только путем вызова метода getJMSReplyTo() для полученного Message.Этот вид устанавливает частный канал между отправителем и получателем. Прочитайте эту замечательную статью о плюсах и минусах временных пунктов назначения.

Пример кода

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