Маршруты
Маршруты используются для реализации интеграционной логики в 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
Маршрут, который запускается при срабатывании таймера через заданные интервалы времени.
Добавление маршрута
|
Инструкция по добавлению маршрута универсальна для всех объектов системы. |
-
Для добавления маршрута перейдите в раздел "Маршруты" выбранного объекта и нажмите кнопку
Add Route.-
Раздел "Маршруты" библиотеки маршрутов
-
Раздел "Маршруты" профиля системы
-
-
Далее выберите подходящий тип маршрута из предложенного списка доступных вариантов:
-
-
При агрегации по телу сообщения (GROUPED :: BODY) заголовки второго и последующих сообщений теряются;
-
Идентификатор сообщения (логирующий ключ) берется из первого сообщения;
-
Свойства
exchangePropertiesпосле работы агрегатора с использованием стратегий JDBC/Postgre/Ignite уничтожаются.
-
-
-
В настоящее время, если в библиотеке маршрутов настроено несколько маршрутов Quartz, значение параметра Auto Start Scheduler, установленное в первом маршруте, применяется ко всем остальным. Даже если в последующих маршрутах указаны другие значения, они будут следовать настройке первого маршрута. Чтобы изменить поведение всех маршрутов, необходимо задать одинаковое значение Auto Start Scheduler для каждого из них. В будущем будет реализована возможность индивидуальной настройки параметра Auto Start Scheduler для каждого маршрута.
-
-
-
-
-
После заполнения всех обязательных полей, нажмите кнопку
Addдля добавления маршрута.
Вызов маршрута
Для вызова маршрута используется кастомный тег call-route.
В зависимости от объекта создания маршрута (профиль, default route, коннектор, сервис или библиотека маршрутов) маршруты имеют разные параметры вызова:
-
Локальные маршруты создаются внутри объекта (профиля, default route, коннектора или сервиса) и доступны только в области его видимости - управляются параметром Local call mode.
-
Глобальные маршруты создаются в библиотеках маршрутов и могут вызываться из других объектов системы - управляются параметрами Global call mode (из других объектов) и Local call mode (внутри библиотеки).
Пример добавления маршрута Aggregator
|
Инструкция по добавлению маршрута Aggregator универсальна для всех объектов системы. |
Рассмотрим пример создания маршрута Aggregator и его последующего вызова.
-
Для добавления маршрута перейдите в раздел "Маршруты" выбранного объекта и нажмите кнопку
Add Route. -
После нажатия
Add Routeвыбираем тип маршрутаAggregator. В открывшемся окне свойств заполняем обязательное поле Route ID уникальным значением, напримерaggregator-01
-
Заполняем обязательное поле Correlation Expression выражением, определяющим, по какому идентификатору агрегатор будет группировать входящие сообщения. В данном примере используется значение
${headers.NTX_correlation_id}
-
Заполняем обязательные поля
-
Aggregation Repository Ref (Определяет репозиторий для хранения промежуточных данных. В примере используется
CAMEL :: MEMORY)
Доступные репозитории
-
CAMEL :: MEMORY
Использует MemoryAggregationRepository и хранит данные агрегации в оперативной памяти. -
ENTAXY :: IGNITE
Хранит данные агрегации в Apache Ignite. -
ENTAXY :: JDBC
Хранит данные агрегации в настроенной базе данных с доступом через JDBC. -
ENTAXY :: POSTGRE
Хранит данные агрегации в PostgreSQL.
-
-
Strategy Ref (Используемая стратегия объединения сообщений)
Доступные стратегии
-
GROUPED::BODY- Агрегирует входящие сообщения в один объект, который содержит все агрегированные тела сообщений в виде списка типа Object в теле сообщения;
-
MAP- Создает структуру данных в виде карты;
Key source header - Заголовок, значение которого используется как ключ при формировании карты агрегации. Значение по умолчанию - AGGREGATION_MAP_KEY.
Value type - Тип данных, сохраняемых в качестве значения карты. Доступные варианты - BODY/MESSAGE/EXCHANGE.
-
String- Агрегирует входящие сообщения в один объект, который содержит все агрегированные тела сообщений в виде строки в теле сообщения;-
Delimeter- разделитель, с помощью которого выполняется объединение.
-
-
-
-
В параметре Completion Size указываем количество сообщений, необходимое для завершения агрегации. В примере используется значение 2
-
В разделе параметров
mainвыбираем режим вызова маршрута.-
Рассмотрим сценарий вызова маршрута из других объектов системы (доступный только для маршрутов создаваемых в библиотеке маршрутов): Поскольку вызов осуществляется извне, используем параметр Global call mode и в примере указываем режим ASYNC.
-
Рассмотрим также сценарий, при котором маршрут недоступен для вызова из других объектов системы (маршруты профиля, default route, коннектора или сервиса). В этом случае используется только параметр Local call mode, и в примере указываем режим ASYNC.
-
-
После заполнения параметров нажимаем кнопку
Addдля добавления маршрута в разделRoutes
-
Чтобы сохранить созданный маршрут и все внесенные изменения, нажимаем кнопку
Save all-
Маршрут библиотеки маршрутов library-01
-
Маршрут профиля системы CRM
-
-
Маршрут успешно сохранен
-
В библиотеке маршрутов library-01
-
В профиле системы CRM
-
Пример вызова маршрута Aggregator
Для вызова маршрута используется кастомный тег call-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">
<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>
<?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>
<?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>
|
В этом примере, когда вы вызываете маршрут
Это необходимо для корректного функционирования агрегации сообщений, так как значение заголовка будет использоваться для идентификации и группировки сообщений в агрегаторе. |
|
При установке значения
|
|
При вызове маршрутов, созданных в библиотеках маршрутов, атрибут library должен быть заполнен всегда — даже если вызов выполняется из той же библиотеки, где находится вызываемый маршрут. |
Управление маршрутами
Сохранить изменения в маршруте
При внесении изменений в существующий маршрут или при добавлении новых маршрутов необходимо сохранить эти изменения.
-
Save all - сохраняет все изменения в разделе "Маршруты";
-
Save - сохраняет изменения только текущего маршрута. Изменения не сохраняются в разделе "Маршруты" до выполнения Save All.
Удалить маршрут
-
Перейдите в раздел "Маршруты", чтобы увидеть все добавленные маршруты;
-
Напротив выбранного маршрута нажмите кнопку
Remove; -
Поле
Statusмаршрута изменится наActive (to removal)и название маршрута в дереве меню будет перечеркнуто;
-
Для окончательного удаления маршрута сохраните изменения.