Маршруты

Маршруты используются для реализации интеграционной логики в Entaxy ION. Объект создания маршрута - профиль, default route, коннектор, сервис или библиотека маршрутов - определяет область его видимости и способы вызова в системе.

Параметры вызова маршрутов

В зависимости от области видимости маршруты имеют разные параметры вызова:

Локальные маршруты

Создаются внутри конкретного объекта (профиля, default route, коннектора или сервиса) и доступны только в его пределах. Для таких маршрутов доступен параметр:

  • Local call mode - определяет, каким образом маршрут может быть вызван внутри текущего объекта (sync, async, both).

Глобальные маршруты

Создаются в библиотеках маршрутов и могут вызываться из других объектов системы. Поэтому для них доступны два параметра:

  • Global call mode - определяет режим вызова маршрута из других объектов системы (sync, async, both).

  • Local call mode - определяет режим вызова маршрута внутри самой библиотеки маршрутов (sync, async, both).

Типы маршрутов

  • AGGREGATOR
    Маршрут для объединения нескольких сообщений в одно на основе определенных условий. Aggregator из паттернов EIP.

  • LISTENER-QUEUE-ARTEMIS
    Маршрут, который прослушивает и обрабатывает сообщения из очереди брокера ActiveMQ Artemis.

  • QUARTZ
    Маршрут для планирования и запуска процессов по расписанию с использованием Quartz 2.x.

  • ROUTE-CALLABLE
    Динамически создаваемый маршрут, который можно вызвать программно.

  • SUBSCRIPTION-TOPIC-ARTEMIS
    Маршрут, который прослушивает и обрабатывает сообщения из топика брокера сообщений ActiveMQ Artemis.

  • TIMER
    Маршрут, который запускается при срабатывании таймера через заданные интервалы времени.

Добавление маршрута

Инструкция по добавлению маршрута универсальна для всех объектов системы.

  1. Для добавления маршрута перейдите в раздел "Маршруты" выбранного объекта и нажмите кнопку Add Route.

    1. Раздел "Маршруты" библиотеки маршрутов

      addroute button
    2. Раздел "Маршруты" профиля системы

      addroute button profile
  2. Далее выберите подходящий тип маршрута из предложенного списка доступных вариантов:

    routes list
    • AGGREGATOR

      • При агрегации по телу сообщения (GROUPED :: BODY) заголовки второго и последующих сообщений теряются;

      • Идентификатор сообщения (логирующий ключ) берется из первого сообщения;

      • Свойства exchangeProperties после работы агрегатора с использованием стратегий JDBC/Postgre/Ignite уничтожаются.

      aggregator route
    • LISTENER-QUEUE-ARTEMIS

      listener queue artemis general
    • QUARTZ

      В настоящее время, если в библиотеке маршрутов настроено несколько маршрутов Quartz, значение параметра Auto Start Scheduler, установленное в первом маршруте, применяется ко всем остальным. Даже если в последующих маршрутах указаны другие значения, они будут следовать настройке первого маршрута. Чтобы изменить поведение всех маршрутов, необходимо задать одинаковое значение Auto Start Scheduler для каждого из них. В будущем будет реализована возможность индивидуальной настройки параметра Auto Start Scheduler для каждого маршрута.

      quartz route
    • ROUTE-CALLABLE

      callable route
    • SUBSCRIPTION-TOPIC-ARTEMIS

      subscription topic artemis general
    • TIMER

      timer route
  3. После заполнения всех обязательных полей, нажмите кнопку Add для добавления маршрута.

Вызов маршрута

Для вызова маршрута используется кастомный тег call-route.

В зависимости от объекта создания маршрута (профиль, default route, коннектор, сервис или библиотека маршрутов) маршруты имеют разные параметры вызова:

  • Локальные маршруты создаются внутри объекта (профиля, default route, коннектора или сервиса) и доступны только в области его видимости - управляются параметром Local call mode.

  • Глобальные маршруты создаются в библиотеках маршрутов и могут вызываться из других объектов системы - управляются параметрами Global call mode (из других объектов) и Local call mode (внутри библиотеки).

Пример добавления маршрута Aggregator

Инструкция по добавлению маршрута Aggregator универсальна для всех объектов системы.

Рассмотрим пример создания маршрута Aggregator и его последующего вызова.

  1. Для добавления маршрута перейдите в раздел "Маршруты" выбранного объекта и нажмите кнопку Add Route.

  2. После нажатия Add Route выбираем тип маршрута Aggregator. В открывшемся окне свойств заполняем обязательное поле Route ID уникальным значением, например aggregator-01

    agg routeid
  3. Заполняем обязательное поле Correlation Expression выражением, определяющим, по какому идентификатору агрегатор будет группировать входящие сообщения. В данном примере используется значение ${headers.NTX_correlation_id}

    agg correlation expression
  4. Заполняем обязательные поля

    agg repo strategy size1
    • Aggregation Repository Ref (Определяет репозиторий для хранения промежуточных данных. В примере используется CAMEL :: MEMORY)

      agg repo

      Доступные репозитории

      aggregationeepository
      • CAMEL :: MEMORY
        Использует MemoryAggregationRepository и хранит данные агрегации в оперативной памяти.

      • ENTAXY :: IGNITE
        Хранит данные агрегации в Apache Ignite.

      • ENTAXY :: JDBC
        Хранит данные агрегации в настроенной базе данных с доступом через JDBC.

      • ENTAXY :: POSTGRE
        Хранит данные агрегации в PostgreSQL.

    • Strategy Ref (Используемая стратегия объединения сообщений)

      agg strategy

      Доступные стратегии

      • GROUPED::BODY - Агрегирует входящие сообщения в один объект, который содержит все агрегированные тела сообщений в виде списка типа Object в теле сообщения;

        strategy grouped body
      • MAP - Создает структуру данных в виде карты;

        strategy map

        Key source header - Заголовок, значение которого используется как ключ при формировании карты агрегации. Значение по умолчанию - AGGREGATION_MAP_KEY.

        Value type - Тип данных, сохраняемых в качестве значения карты. Доступные варианты - BODY/MESSAGE/EXCHANGE.

      • String - Агрегирует входящие сообщения в один объект, который содержит все агрегированные тела сообщений в виде строки в теле сообщения;

        • Delimeter - разделитель, с помощью которого выполняется объединение.

          strategy delimeter
  5. В параметре Completion Size указываем количество сообщений, необходимое для завершения агрегации. В примере используется значение 2

    agg repo strategy size2
  6. В разделе параметров main выбираем режим вызова маршрута.

    • Рассмотрим сценарий вызова маршрута из других объектов системы (доступный только для маршрутов создаваемых в библиотеке маршрутов): Поскольку вызов осуществляется извне, используем параметр Global call mode и в примере указываем режим ASYNC.

      callable main
    • Рассмотрим также сценарий, при котором маршрут недоступен для вызова из других объектов системы (маршруты профиля, default route, коннектора или сервиса). В этом случае используется только параметр Local call mode, и в примере указываем режим ASYNC.

      route local async
  7. После заполнения параметров нажимаем кнопку Add для добавления маршрута в раздел Routes

    agg add
  8. Чтобы сохранить созданный маршрут и все внесенные изменения, нажимаем кнопку Save all

    • Маршрут библиотеки маршрутов library-01

      agg saveall
    • Маршрут профиля системы CRM

      agg saveall local
  9. Маршрут успешно сохранен

    • В библиотеке маршрутов library-01

      agg list
    • В профиле системы CRM

      agg list local

Пример вызова маршрута Aggregator

Для вызова маршрута используется кастомный тег call-route.

Пример 1. Вызов маршрута aggregator-01, созданного в библиотеке маршрутов library-01, из другого объекта системы (профиля) с использованием глобального режима вызова (Global call mode: Async):
<?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">
    <setProperty name="NTX_profile_in_preRouted">
        <constant>true</constant>
    </setProperty>
    <setHeader name="NTX_correlation_id">
        <constant>example</constant>
    </setHeader>
    <m:call-route library="library-01" name="aggregator-01" async="true"/>
</entaxy:object-route>
Пример 2. Вызов маршрута aggregator-01, созданного в библиотеке маршрутов library-01, из другого маршрута созданного в той же библиотеке маршрутов library-01, с использованием локального режима вызова (Local call mode:Async):
<?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">
    <setProperty name="NTX_profile_in_preRouted">
        <constant>true</constant>
    </setProperty>
    <setHeader name="NTX_correlation_id">
        <constant>example</constant>
    </setHeader>
    <m:call-route library="library-01" name="aggregator-01" async="true"/>
</entaxy:object-route>
Пример 3. Вызов маршрута aggregator-01, созданного в этом же объекте (профиле, default route, коннекторе или сервисе), с использованием локального режима вызова (Local call mode: Async):
<?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">
    <setProperty name="NTX_profile_in_preRouted">
        <constant>true</constant>
    </setProperty>
    <setHeader name="NTX_correlation_id">
        <constant>example</constant>
    </setHeader>
    <m:call-route name="aggregator-01" async="true"></m:call-route>
</entaxy:object-route>

В этом примере, когда вы вызываете маршрут aggregator-01, важно установить значение заголовка NTX_correlation_id, которое используется в Correlation Expression маршрута.

agg correlation expression

Это необходимо для корректного функционирования агрегации сообщений, так как значение заголовка будет использоваться для идентификации и группировки сообщений в агрегаторе.

При установке значения async важно проверить настройки вызываемого маршрута, чтобы убедиться, что режимы вызова соответствуют выставленным параметрам:

agg main
  • Global call mode: none, sync, async или both. Определяет метод вызова маршрута для всех сущностей в системе Entaxy.

  • Local call mode: none, sync, async или both Определяет метод вызова маршрута только для текущей сущности в системе Entaxy.

При вызове маршрутов, созданных в библиотеках маршрутов, атрибут library должен быть заполнен всегда — даже если вызов выполняется из той же библиотеки, где находится вызываемый маршрут.

Управление маршрутами

Сохранить изменения в маршруте

При внесении изменений в существующий маршрут или при добавлении новых маршрутов необходимо сохранить эти изменения.

lib route saveall
  • Save all - сохраняет все изменения в разделе "Маршруты";

  • Save - сохраняет изменения только текущего маршрута. Изменения не сохраняются в разделе "Маршруты" до выполнения Save All.

Удалить маршрут

  1. Перейдите в раздел "Маршруты", чтобы увидеть все добавленные маршруты;

  2. Напротив выбранного маршрута нажмите кнопку Remove;

  3. Поле Status маршрута изменится на Active (to removal) и название маршрута в дереве меню будет перечеркнуто;

    active to removal
  4. Для окончательного удаления маршрута сохраните изменения.

Восстановить маршрут

  1. Если маршрут был помечен для удаления (Status - Active (to removal)), но изменения не были сохранены, маршрут можно восстановить. Для этого нажмите кнопку Restore напротив маршрута.

  2. Статус маршрута изменится на Active, и маршрут будет восстановлен.