Контейнер приемника сообщений Spring JMS - PullRequest
6 голосов
/ 04 июня 2009

Я новичок в JMS и работаю над настройкой ActiveMQ с Tomcat 6 и Spring. У меня настроено большинство основных вещей, но я немного запутался с контейнерами приемника сообщений, которые предоставляет Spring. Читая документацию, звучит так, как будто контейнер прослушивателя сообщений используется для «обработки» подписки (я работаю с темами), отписки и доставки сообщения слушателю. Я не уверен, правильно ли я думаю об этом. Если это так, я не вижу никакой документации о том, как я мог бы иметь несколько классов, подписывающихся на одну и ту же тему с помощью контейнера приемника сообщений. Я вижу, что вы можете установить свойство messageListener, но это позволит только одному классу иметь возможность подписаться на тему. Кажется неправильным создавать другой экземпляр того же контейнера приемника сообщений, просто чтобы другой подписчик (управляемый сообщениями POJO) слушал ту же тему.

Может кто-нибудь пролить свет на это для меня? Я думаю, что я могу быть немного смущен.

Заранее спасибо!

Ответы [ 3 ]

4 голосов
/ 07 июня 2009

Если вы знакомы с управляемыми сообщениями EJB-компонентами, тогда Spring MessageListenerContainer фактически заменяет MDB. Он получил свое имя, потому что он связан с темой / очередью JMS, а также одним JMS MessageListener, и он извлекает сообщения из этой темы / очереди и передает их в MessageListener.

Вы совершенно правы, что только один MessageListener может быть зарегистрирован в каждом контейнере за раз, но учтите, что хотя код MessageListenerContainer может быть довольно сложным, на самом деле это очень легкий компонент времени выполнения. Не бойтесь создавать несколько его экземпляров.

Кроме того, убедитесь, что вы выбрали соответствующую реализацию MessageListener для вашей ситуации. Реализация Simple и Default действительно сильно отличается, но ни одна из них не «лучше».

2 голосов
/ 26 июня 2012

Ребята правы, что несколько контейнеров могли бы помочь вам, но это похоже на неправильный подход. Поскольку целью JMS является интеграция различных приложений / сервисов, а не внутренних процессов приложений (несколько классов, о которых вы говорите). Я бы посоветовал отправлять сообщения различным классам самостоятельно после получения их прослушивателем сообщений. В противном случае вы посмотрите на фреймворки, такие как Apache Camel или Spring Integration.

0 голосов
/ 05 июня 2009

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

...