Интеграция с STOMP
Описание
В данном примере демонстрируется взаимодействие с брокером сообщений ActiveMQ Artemis по протоколу STOMP с использованием Apache Camel. Реализуется отправка и чтение сообщений из очереди. В качестве транспорта используется встроенная поддержка STOMP в Artemis, а маршруты Camel обеспечивают формирование и обработку сообщений.
-
В сборке Entaxy ION all-in-one в Artemis STOMP уже включен:
475 │ Active │ 60 │ 2.19.0 │ ActiveMQ Artemis STOMP Protocol -
Установить фичу Camel STOMP:
feature:install camel-stomp -
Убедиться, что установленные бандлы находятся в статусе Active:
618 │ Active │ 50 │ 3.4.5 │ camel-stomp 619 │ Active │ 50 │ 1.22.0 │ hawtdispatch 620 │ Active │ 50 │ 1.22.0 │ hawtdispatch-transport 621 │ Active │ 50 │ 1.19 │ stompjms-client -
Создать профиль системы с именем
stompи добавить к нему:-
Входной кастомный коннектор (consumer). В точке кастомизации custom-route создаем маршрут, который подписывается на очередь testQueue через STOMP и логирует входящие сообщения:
<?xml version="1.0" encoding="UTF-8"?> <entaxy:object-input-route xmlns="http://camel.apache.org/schema/blueprint" xmlns:blueprint="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:entaxy="http://www.entaxy.ru/schemas/1.0" xmlns:m="http://www.entaxy.ru/schemas/entaxy-mediators/1.0"> <blueprint:bean id="stompConfig" class="org.apache.camel.component.stomp.StompConfiguration"> <blueprint:property name="brokerURL" value="tcp://localhost:61616"/> <blueprint:property name="login" value="entaxy"/> <blueprint:property name="passcode" value="entaxy"/> </blueprint:bean> <blueprint:bean id="stomp" class="org.apache.camel.component.stomp.StompComponent"> <blueprint:property name="configuration" ref="stompConfig"/> </blueprint:bean> <from uri="stomp:queue:testQueue"/> <m:log message="Received STOMP body: ${body}"/> <m:respond now="true" continue="false"/> </entaxy:object-input-route> -
Выходной кастомный коннектор (producer). В точке кастомизации custom-route создаем маршрут, который формирует сообщение и отправляет его в очередь testQueue:
<?xml version="1.0" encoding="UTF-8"?> <entaxy:object-route xmlns="http://camel.apache.org/schema/blueprint" xmlns:blueprint="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:entaxy="http://www.entaxy.ru/schemas/1.0" xmlns:m="http://www.entaxy.ru/schemas/entaxy-mediators/1.0"> <blueprint:bean id="stompConfig" class="org.apache.camel.component.stomp.StompConfiguration"> <blueprint:property name="brokerURL" value="tcp://localhost:61616"/> <blueprint:property name="login" value="entaxy"/> <blueprint:property name="passcode" value="entaxy"/> </blueprint:bean> <blueprint:bean id="stomp" class="org.apache.camel.component.stomp.StompComponent"> <blueprint:property name="configuration" ref="stompConfig"/> </blueprint:bean> <transform> <simple>Hello STOMP Entaxy!</simple> </transform> <to uri="stomp:queue:testQueue"/> <m:respond now="true" continue="false"/> </entaxy:object-route> -
К выходному кастомному коннектору добавляем маршрут на базе компонента таймер, инициирующий вызов коннектора с заданным интервалом:
<?xml version="1.0" encoding="UTF-8"?> <entaxy:common-route xmlns="http://camel.apache.org/schema/blueprint" xmlns:blueprint="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:entaxy="http://www.entaxy.ru/schemas/1.0" xmlns:m="http://www.entaxy.ru/schemas/entaxy-mediators/1.0"> <m:log message="in route ${routeId}" loggingLevel="INFO"/> <to uri="system:mqtt"/> </entaxy:common-route>
-
-
Пересохраняем входной коннектор, чтобы инициировать подписку на очередь testQueue. Затем запускаем маршрут таймера, который вызывает выходной коннектор. Выходной коннектор формирует сообщение и отправляет его в очередь testQueue. Входной коннектор получает это сообщение и выводит его в лог:
12:53:42.877 INFO [hawtdispatch-DEFAULT-3] ef7c0224-1770-4c2f-a62c-5f381d442b59#{"service":"stomp.custom-connector-in.main","sender":"stomp"}# Received STOMP body: ascii: Hello STOMP Entaxy