Поддерживает ли JMS API асинхронный двунаправленный обмен сообщениями? - PullRequest
1 голос
/ 29 ноября 2011

Примеры, которые я видел, похоже, поддерживают несколько вариантов использования:

  1. Точка-точка - от одного издателя к одному потребителю, однонаправленная связь от издателя к потребителю
  2. Публикация / подписка -Публикация для нескольких потребителей, однонаправленная связь от издателя к потребителю
  3. Запрос / ответ - от одного издателя к одному потребителю, двунаправленная связь, но блокировка

Мне нужна двунаправленная асинхронная передача сообщений,Например, я хотел бы сделать следующее

Publisher: "Hello world" to consumer
Consumer: Process "Hello world"

Wait 5 minutes

Consumer: "Hello publisher" to publisher
Publisher: Process "Hello publisher"

Поддерживает ли API описанный выше вариант использования?Или мне нужно реализовать все как издатель и потребитель одновременно?

Ответы [ 4 ]

1 голос
/ 29 ноября 2011

Скорее всего, вам лучше всего использовать 2 очереди.Один и тот же объект на каждой стороне может быть производителем в одной очереди и потребителем в другой.Тогда у вас есть:

Object1 "Hello world" -> queueDirection1 ->  Object2 processes "hello world" 
Object2 "Hello world" -> queueDirection2 ->  Object1 processes "hello world" 

Это теперь полностью асинхронно, без временных требований между очередями.

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

0 голосов
/ 04 января 2013

Вы можете использовать Apache Camel http://camel.apache.org/ и работать с компонентом JMS для отправки сообщения способом In / InOut. Camel создает временную очередь для отправки ответа на каждый запрос, если вы используете метод inOut. Кроме того, он предоставляет множество возможностей для разнообразной обработки сообщений и обогащения содержимого сообщений на лету.

0 голосов
/ 29 ноября 2011

JMS не имеет API для вашего требования.Вы можете реализовать свое требование, используя обмен сообщениями точка-точка.

Издатель "Hello World" -> Q1 -> Потребительские процессы "Hello World".

Подождите 5 секунд

Consumerговорит "Hello World" -> Q1 -> Издатель обрабатывает "Hello World"

0 голосов
/ 29 ноября 2011

Я не пробовал это сам, но реализация, которая использует JMSReplyTo, могла бы быть способом решить эту проблему.

Проверьте это Как мне реализовать ответ на запрос с JMS? doc от ActiveMQ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...