Введение: 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 на Акции и другие вещи .
Я надеюсь, что этот блог помог вам. Пожалуйста, оставьте мне отзыв.