Статьи

PubSub с vFabric RabbitMQ и Spring Integration с использованием Spring AMQP

Введение: Spring AMQP и vFabric RabbitMQ

vFabric RabbitMQ — это предложение от VMware, поддерживающее
стандарт
AMQP .
AMQP существует уже давно, на высоком уровне
AMQP является еще одним стандартным API для отправки и получения сообщений между приложениями, похожими на JMS. Основным отличием является то, что AMQP — это протокол на уровне проводов, JMS — это стандарт JAVA. Есть
нейтральный блог, сравнивающий AMQP и JMS .

Согласно этому блогу, AMQP — это стандарт, который популярен среди разработчиков Python, RoR и C ++.
Stomp и
OpenWire являются одними из реализаций AMQP. В мире Spring у нас есть
абстракция
Spring AMQP и
vFabric RabbitMQимеет первую реализацию
Spring AMQP . Это  
хорошее введение в Spring AMQP с vFabric RabbitMQ .

На высоком уровне RabbitMQ не имеет понятия Темы, как в JMS. У него есть концепция очередей и обменов. Обмены могут быть разных типов, таких как Fanout, Topic. Обратитесь к топологии маршрутизации, используемой RabbitMQ . В VMware также есть хорошая статья о том, как vFabric RabbitMQ используется для очень большой реализации обмена сообщениями, и о понимании AMQP, протокола, используемого RabbitMQ .

Запустите Опубликовать Подписаться с помощью Spring Integration

В этом примере мы создали 2 компонента Spring Integration . Существует компонент Publisher, который публикует сообщения на RebbitMQ Exchange . Сообщение разветвляется на несколько очередей. Subscriber Spring Integration прослушивает очередь и обрабатывает сообщения. Существуют различные способы использования сообщений публикации / подписки в vFabric RabbitMQ , по этому поводу есть хорошая статья в stackoverflow . Также есть хорошая статья о том, как Publisher / Subscriber работает в RabbitMQ .

В примере мы использовали конфигурацию Spring Integration для определения подписчика, как показано ниже:

<!-- A reference to the org.springframework.amqp.rabbit.connection.ConnectionFactory -->
<rabbit:connection-factory id="connectionFactory"/>

<!-- Creates a org.springframework.amqp.rabbit.core.RabbitTemplate for access to the broker -->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"/>
<!-- Creates a org.springframework.amqp.rabbit.core.RabbitAdmin    to manage exchanges, queues and bindings -->
<rabbit:admin connection-factory="connectionFactory"/>
<!-- Queues -->
<rabbit:queue id="queue1" name="queue.1.name"/>
<rabbit:queue id="queue2" name="queue.2.name"/>

<!-- Exchanges -->
<rabbit:fanout-exchange name="fanout.exchange.1.name">
<rabbit:bindings>
<rabbit:binding queue="queue1"/>
<rabbit:binding queue="queue2"/>
</rabbit:bindings>
</rabbit:fanout-exchange>

<int:publish-subscribe-channel id="fanoutChannel" />

<int-amqp:outbound-channel-adapter channel="fanoutChannel"
amqp-template="amqpTemplate" exchange-name="fanout.exchange.1.name"/>

В нашей демонстрации вы можете запустить vFabric RabbitMQ и запустить тест, как показано ниже, издатель поместит сообщение в 2 очереди.

mvn -Dtest=com.goSmarter.amqp.PublisherSubscriberTest test

Если вы откроете консоль управления vFabric RabbitMQ, она покажет, что в очереди есть сообщение.

Конфигурация Subscriber Spring Integration выглядит следующим образом:

<!-- A reference to the org.springframework.amqp.rabbit.connection.ConnectionFactory -->
<rabbit:connection-factory id="connectionFactory" />

<!-- Creates a org.springframework.amqp.rabbit.core.RabbitTemplate for access   to the broker -->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />

<!-- Creates a org.springframework.amqp.rabbit.core.RabbitAdmin to manage   exchanges, queues and bindings -->
<rabbit:admin connection-factory="connectionFactory" />
<int:channel id="inbound-channel" />

<int-amqp:inbound-channel-adapter
channel="inbound-channel" queue-names="queue.1.name"
connection-factory="connectionFactory" />

<int:service-activator input-channel="inbound-channel"
id="serviceActivator" ref="serviceActivatorBean" method="logXml" />

<bean id="serviceActivatorBean"
class="com.goSmarter.amqp.service.Subscriber1ServiceActivator">
</bean>

Теперь, когда вы запускаете экземпляр подписчика Tomcat в STS как «Запуск на сервере», он выбирает сообщение из очереди и выводит его на консоль.

Вывод

В этом блоге я продемонстрировал простого основанного на разветвлении издателя / подписчика, где в издателе публикуется сообщение, а подписчик подписывается и распечатывает его. Это поможет вам создать достойный прототип Spring AMQP. Есть также несколько образцов Spring AMQP на Акции и другие вещи .

Я надеюсь, что этот блог помог вам. Пожалуйста, оставьте мне отзыв.