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

Описание

В данном примере демонстрируется настройка взаимодействия с использованием JMS в Entaxy ION. Реализуется отправка и чтение сообщений из очереди.

Процесс взаимодействия с JMS состоит из следующих шагов:

  1. Создать профиль системы с именем jms и добавить к нему:

    1. Входной кастомный коннектор (consumer). В точке кастомизации custom-route создаем маршрут для чтения сообщений из очереди:

      <?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="jmsTest" class="org.apache.camel.component.jms.JmsComponent">
              <blueprint:property name="connectionFactory" ref="pooledConnectionFactory"/>
          </blueprint:bean>
          <blueprint:bean id="pooledConnectionFactory" class="org.messaginghub.pooled.jms.JmsPoolConnectionFactory" init-method="start" destroy-method="stop">
              <blueprint:property name="maxConnections" value="10"/>
              <blueprint:property name="maxSessionsPerConnection" value="100"/>
              <blueprint:property name="connectionFactory" ref="artemisConnectionFactory"/>
          </blueprint:bean>
          <blueprint:bean id="artemisConnectionFactory" class="org.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory">
              <blueprint:argument index="0" value="(tcp://localhost:61616)"/>
              <blueprint:argument index="1" value="entaxy"/>
              <blueprint:argument index="2" value="entaxy"/>
          </blueprint:bean>
          <from uri="jmsTest:test35"/>
          <m:log loggingLevel="INFO" message="Result JMS IN: ${body}"/>
          <m:respond now="true" continue="false"/>
      </entaxy:object-input-route>
    2. Выходной кастомный коннектор (producer). В точке кастомизации custom-route создаем маршрут для отправки сообщений в очередь:

      <?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="jmsTest" class="org.apache.camel.component.jms.JmsComponent">
              <blueprint:property name="connectionFactory" ref="pooledConnectionFactory"/>
          </blueprint:bean>
          <blueprint:bean id="pooledConnectionFactory" class="org.messaginghub.pooled.jms.JmsPoolConnectionFactory" init-method="start" destroy-method="stop">
              <blueprint:property name="maxConnections" value="10"/>
              <blueprint:property name="maxSessionsPerConnection" value="100"/>
              <blueprint:property name="connectionFactory" ref="artemisConnectionFactory"/>
          </blueprint:bean>
          <blueprint:bean id="artemisConnectionFactory" class="org.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory">
              <blueprint:argument index="0" value="(tcp://localhost:61616)"/>
              <blueprint:argument index="1" value="entaxy"/>
              <blueprint:argument index="2" value="entaxy"/>
          </blueprint:bean>
          <setBody>
              <simple>Entaxy JMS test message in ${headers.firedTime}</simple>
          </setBody>
          <m:log loggingLevel="INFO" message="Body JMS OUT: ${body}"/>
          <to uri="jmsTest:test35"/>
      </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:jms"/>
      </entaxy:common-route>
  2. В результате мы получаем:

    • Таймер инициирует вызов выходного коннектора профиля jms

    • В выходном коннекторе (producer) формируется сообщение и отправляется в очередь test35

    • Входной коннектор (consumer) подписан на данную очередь и автоматически получает сообщения

    • Полученные сообщения отображаются в логах:

      11:14:55.926 INFO [Thread-195]  Body JMS OUT: Entaxy JMS test message in Tue Apr 21 11:14:55 MSK 2026
      11:14:55.956 INFO [Camel (jms.custom-connector-in.main) thread #69 - JmsConsumer[test35]] c58dc3a0-482e-49b1-8b17-be17f57f0615#{"service":"sys-26","sender":"jms"}# Result JMS IN: Entaxy JMS test message in Tue Apr 21 11:14:55 MSK 2026