Интеграция с STOMP

Описание

В данном примере демонстрируется взаимодействие с брокером сообщений ActiveMQ Artemis по протоколу STOMP с использованием Apache Camel. Реализуется отправка и чтение сообщений из очереди. В качестве транспорта используется встроенная поддержка STOMP в Artemis, а маршруты Camel обеспечивают формирование и обработку сообщений.

  1. В сборке Entaxy ION all-in-one в Artemis STOMP уже включен:

    475 │ Active │ 60 │ 2.19.0 │ ActiveMQ Artemis STOMP Protocol
  2. Установить фичу Camel STOMP:

    feature:install camel-stomp
  3. Убедиться, что установленные бандлы находятся в статусе 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
  4. Создать профиль системы с именем stomp и добавить к нему:

    1. Входной кастомный коннектор (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>
    2. Выходной кастомный коннектор (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>
    3. К выходному кастомному коннектору добавляем маршрут на базе компонента таймер, инициирующий вызов коннектора с заданным интервалом:

      <?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>
  5. Пересохраняем входной коннектор, чтобы инициировать подписку на очередь 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