Direct
Общее описание
Блок Direct позволяет соединять несколько потоков между собой через пару блоков Direct (отправитель - получатель) для реализации сложных сценариев, где один поток вызывает один или несколько других потоков, находящихся в этом же домене. Для этого один блок Direct размещается в потоке-отправителе (родительском потоке) как блок-обработчик, второй блок Direct - в потоке-получателе (дочернем потоке), как блок-инициатор. Любой поток – и родительский, и дочерний, может иметь неограниченное число дочерних потоков, расположенных как последовательно, так и в параллельных ветках потока.
Блок Direct может использоваться в качестве:
- блока отправителя
- блока получателя.
Создание связанных блоков Direct
При связывании пары "поток-отправитель - поток-получатель", первым должен быть создан блок-получатель как инициатор вызываемого потока для того, чтобы на блоке-отправителе можно было бы его выбрать.
Редактирование версий потоков
При редактировании версии потока, содержащего блок Direct, изменения вносятся либо в существующий черновик версии, либо создается новая версия.
При сохранении версии потока, содержащего блок-отправитель Direct, в базу данных вносится запись, связывающая блок-отправитель Direct c блоком-получателем в активной версии дочернего потока или, если активных версий нет, то с блоком-получателем Direct в последней сохраненной версии дочернего потока.
Удаление потоков и версий потоков
При удалении версии потока, содержащего блок Direct выполняется следующее правило:
- Если есть родительские потоки, вызывающие данную версию потока, то операция удаления прерывается и на экране отображается сообщение о ошибке.
При удалении потока со всеми версиями проверяется есть ли родительские потоки, вызывающие его и, если есть, то операция удаления прерывается и на экране отображается сообщение об ошибке.
Активация потоков
Вызываемые дочерние блоки должны быть активированы до активации родительского потока, содержащего блок-отправитель Direct. При активации потока, содержащего блок-отправитель Direct, проверяется наличие дочерних потоков.
Если дочерние потоки есть и у блока-отправителя Direct не включен атрибут Disabled, то проверяется активны ли дочерние потоки.
- Если дочерние потоки активны, то родительский поток активируется.
- Если дочерние потоки находятся в процессе активации, то активация родительского потока блокируется до завершения активации вызываемых потоков. Операцию активации родительского потока при этом необходимо заново инициировать.
- Если дочерние потоки не активны и не находятся в процессе активации, то активация родительского потока прерывается и на экране отображается сообщение об ошибке.
Деактивация потоков
При деактивации потока выполняется проверка есть ли у него родительские потоки. Если они есть, то операция деактивации прерывается и на экране отображается сообщение об ошибке.
Просмотр связанных потоков
После установления связи потоков система позволяет просматривать дерево связанных потоков.
Слева внизу под редактором потоков размещается кнопка Связанные потоки, по нажатию на которую раскрывается панель, на которой отображается дерево родительских и дочерних потоков. Дерево связанных потоков генерируется с учетом следующих ограничений:
- Учитываются только "прямые родственные связи"
- Не учитываются черновики потоков.
В окне просмотра дерева потоков отображаются следующие элементы:
- Поле поиска по имени и идентификатору потока.
- Кнопки изменения масштаба, а также кнопка масштабирования области просмотра по размеру панели.
Блок Direct может использоваться в качестве:
- блока – отправителя
- блока – получателя.
Настройка блока
В данном разделе описаны параметры блока Direct, которые необходимо заполнить при его настройке.
Базовые параметры
| Название в UI | Название атрибута | Доступность | Описание | Значение по умолчанию | Тип данных |
|---|---|---|---|---|---|
| Dynamic Endpoint | dynamicEndpoint | Отправитель | Параметр позволяет включить встроенную функциональность динамического определения вызываемоой конечной точки. При включении параметра структура блока меняется таким образом, что в коде вместо определения to проставляется toD, а значение самого вызываемого ресурса может собираться из переменной, например | False | Логическое значение |
| Pattern | pattern | Отправитель | Устанавливает стиль взаимодействия с присоединенной частью потока. Возможные значения:
| Список | |
| Set Direct Unique Name | name | Получатель | Обязательный параметр Имя конечной точки Direct - получателя. Имя должно быть уникальным в системе. | Строка | |
| Set direct trigger | direct | Отправитель | Обязательный параметр Выбор имени дочернего блока-получателя Direct. В списке отображаются все блоки-инициаторы Direct, существующие внутри родительского домена. При этом никакой из дочерних потоков, а также их потомков, не должен приводить к вызову родительского, поскольку это образует циклическую зависимость потоков. В списке доступных блоков-получателей отображаются блоки Direct в активных версиях потоков. При отсутствии у потока активной версии в списке отображается последняя сохраненная версия потока. | Список | |
| Block | block | Отправитель | Обязательный параметр Включение этого атрибута позволяет во время работы потока при отправке сообщения в конечную точку Direct, не имеющую активного получателя, заблокировать отправителя до момента активации получателя. | True | Логическое значение |
| Fail If No Consumers | failIfNoConsumers | Отправитель | Определяет должен ли отправитель сгенерировать исключение при отправке в конечную точку Direct без активных получателей. | True | Логическое значение |
| Timeout | timeout | Отправитель | Время ожидания в мс в том случае, если атрибут Block включен - таймаут генерации failIfNoConsumers. | 30000 | Длинное целое число |
Расширенные параметры
| Название в UI | Название атрибута | Доступность | Описание | Значение по умолчанию | Тип данных |
|---|---|---|---|---|---|
| Bridge Error Handler | bridgeErrorHandler | Получатель | Позволяет связать блок-инициатор с обработчиком ошибок маршрутизации. Это означает, что любые ошибки (если есть), возникающие при попытке потребителя ESB получить входящие сообщения и т.п., теперь будут обрабатываться выбранным обработчиком ошибок маршрутизации как сообщения. Примечание: Это возможно только в том случае, если сторонний компонент позволяет ESB получать уведомления о возникновении ошибок. Некоторые компоненты обрабатывают их только внутри себя, поэтому использование bridgeErrorHandler невозможно. | False | Логическое значение |
| Exception Handler | exceptionHandler | Получатель | Предназначен для того, чтобы блок-инициатор мог использовать собственный ExceptionHandler. Примечание: Если включена опция bridgeErrorHandler, то эта опция не используется. По умолчанию блок-инициатор будет обрабатывать исключения, которые будут регистрироваться на уровне WARN или ERROR и игнорироваться. | Строка | |
| Exchange Pattern | exchangePattern | Получатель | Устанавливает стиль взаимодействия с присоединенной частью потока. Возможные значения: | Список | |
| Lazy Start Producer | lazyStartProducer | Отправитель | Определяет должен ли отправитель стартовать в отложенном режиме (при получении первого сообщения). Отложенный запуск можно использовать в ситуациях, когда запуск отправителя может завершиться неудачей и привести к сбою при запуске маршрута. Если отложить запуск, то сбой при запуске можно будет обработать во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации. Обратите внимание, что при обработке первого сообщения создание и старт отправителя могут занять некоторое время и увеличить общее время обработки. | False | Логическое значение |
| Synchronous | synchronous | Отправитель/Получатель | Параметр включает принудительную синхронную обработку. Если параметр включен, то поток-отправитель будет ждать завершения отправки сообщения, прежде чем продолжить работу. Если этот параметр отключен, то поток-отправитель может быть высвобожден и выполнять другую работу, в то время как сообщение продолжает обрабатываться другими потоками (реактивными). | False | Логическое значение |
| Disabled | disabled | Отправитель | Определяет будет ли отключен блок в потоке. В активированном потоке функциональность блока не будет отрабатываться. | False | Логическое значение |