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