Возможен ли синхронный обмен сообщениями с JMS / WMQ? - PullRequest
4 голосов
/ 17 февраля 2011

Допустим, есть мобильное приложение, которому необходимо выполнить запрос / запрос синхронизации для некоторых данных с сервера.Сначала запрос поступит на размещенный JMS-клиент, который опубликует сообщение / запрос во внешней очереди (от партнера).Теперь здесь, где это начинает быть неясно.Как получить ответ от партнера в синхронном режиме.

  • Должен ли партнер предоставить отдельную очередь для меня, чтобы подписаться, и я затем заблокирую мобильный запрос, пока не получу ответное сообщение из этой отдельной очереди?
  • Поддерживает ли JMS или проприетарный интерфейс WebSphere MQ синхронизацию сообщений?
  • Какие еще способы можно реализовать с помощью обмена сообщениями?

Спасибо

Ответы [ 3 ]

4 голосов
/ 17 февраля 2011

Шаблон учебника выглядит следующим образом:

  1. Приложение JMS получает запрос от мобильного устройства.
  2. Приложение JMS открывает очередь ответа (которая может быть динамической).
  3. Приложение JMS подготавливает сообщение запроса с указанием пункта назначения # 2 в качестве пункта назначения JMSREplyTo.
  4. Приложение JMS отправляет запрос вне точки синхронизации внешнему поставщику услуг.
  5. JMSПриложение прослушивает ответ с указанным интервалом ожидания.Если он использовал динамическую очередь ответа, он просто получает.Если несколько экземпляров прослушивают одну и ту же очередь (что более вероятно при использовании внешней службы), то он использует JMSMessageID, возвращаемый при отправке, в качестве JMSCorrelationID, указанного в получении.
  6. Приложение JMS получает ответ от внешнейоказание услуг.
  7. Приложение JMS отвечает на мобильное устройство.

Обратите внимание, что с помощью WMQ ожидаемое поведение от поставщика услуг заключается в копировании JMSMessageID из сообщения запроса в JMSCorrelationID ответа.Реже требуется, чтобы отправитель генерировал идентификатор JMSCorrelation и копировал его в JMSCorrelationID ответа, но некоторые приложения используют такое поведение.Вам нужно будет понять, как ваш поставщик услуг справляется с этим, чтобы определить правильное поведение приложения-запросчика.

Если вы используете полную установку клиента WMQ, у вас уже будет образец кода, который выполняет большую часть этого.Если установлен в папку по умолчанию, посмотрите в ...

C:\Program Files\IBM\Websphere MQ\tools\jms\samples\simple\simpleRequestor.java

... или эквивалентном расположении под /var/mqm для дистрибутивов UNIX / Linux.Это одна из многих причин установить полный клиент, а не просто получить файлы JAR.Если вам нужно скачать клиент поставляется как SupportPac MQC7 .

2 голосов
/ 17 февраля 2011

«Клиент» может создать временную очередь и передать ее имя в запросе.

«Сервер» получает запрос в известной очереди, но отправляет «replyTo» с именем очереди, заданным «клиентом».

Для этой цели у JMS есть свойство replyTo.

Таким образом, клиент видит только сообщения, предназначенные для него.

0 голосов
/ 17 февраля 2011

В верхней части головы я вижу 2 пути.

  1. создать 2 очереди: входящую и исходящую. Клиент отправляет во входящую очередь и получает сообщения из исходящей очереди.

  2. вы можете использовать одну и ту же очередь для обоих. Просто установите специальное свойство для каждого сообщения и используйте селектор для фильтрации только соответствующих сообщений.

ваша сторона сервера должна сначала отправить сообщение, а затем вызвать метод receive (см. JMS javadoc). Этот метод блокируется до тех пор, пока вы не получите сообщение или не истечет время ожидания. Для вас важно использовать этот способ, а не прослушивать сообщения (слушатели используются для асинхронного режима)

...