JMS - CorrelationID против ReplyTo - PullRequest
       26

JMS - CorrelationID против ReplyTo

0 голосов
/ 06 июня 2019

Я работаю над интеграцией через JMS, используя JmsTemplate из Spring Framework.Я хочу выполнить синхронный (т.е. блокирующий) вызов к внешней системе.Я прочитал, что для этого я должен использовать CorrelationID.Спецификация JMS гласит:

Клиент может использовать поле заголовка JMSCorrelationID для связи одного сообщения с другим.Обычно используется для связывания ответного сообщения с его сообщением-запросом.

Таким образом, он явно предлагает использовать CorrelationID для шаблона запроса / ответа.

Я также обнаружил, что JmsTemplateимеет sendAndReceive метод, который был разработан для достижения аналогичной цели.sendAndReceive использует внутренне doSendAndReceive, что в соответствии с javadoc :

Отправляет сообщение-запрос на указанное место назначения и блокируется до получения ответа во временной очереди, созданной в-The-Fly.

Теперь я действительно смущен.Имеет ли заголовок CorrelationID что-то общее с заголовком ReplyTo.Это два разных способа добиться синхронного вызова?Или, может быть, оба должны использоваться вместе?Простые разъяснения на простом английском языке были бы более чем желательны.

1 Ответ

1 голос
/ 06 июня 2019

Они на самом деле не связаны.Если вы используете временную очередь ответов для каждого запроса, вам не нужен идентификатор корреляции.Если вы используете отдельные очереди запросов / ответов, вам нужно что-то, чтобы соотнести ответ с его запросом;следовательно, correlationId.

Исходящий шлюз Spring Integration поддерживает оба метода и обрабатывает корреляцию для вас (вызывающий поток блокируется до получения ответа, независимо от того, какой метод используется).

...