Вызов транзакций

Вызов транзакций используется для вызова одной или нескольких команд кластера на целевом узле. Она похожа на удаленные вызовы процедур, выполняемые для команды, определенной в кластере.

Как и транзакции записи, транзакции вызова поддерживают транзакции с ограничением по времени и без него. Дополнительную информацию о транзакциях с ограничением по времени можно найти в разделе Действия с ограничением по времени и без него.

Untimed Invoke Transaction

Последовательность операций при вызове транзакции без ограничения времени
Рисунок 1. Вызов транзакции без временных ограничений

Invoke Request Action

Направление: инициатор -> цель

Как и в случае с действиями Read Request Action и Write Request Action, в этом действии инициатор предоставляет целевому устройству:

  • Запросы вызова – список путей к командам кластера, а также необязательные аргументы к командам, которые называются полями команд.
  • Запрос с временной задержкой – флаг, указывающий, является ли это действие частью транзакции с временной задержкой.
  • Suppress Response (Подавить ответ) – флаг, указывающий, следует ли подавлять действие Invoke Response Action (Вызвать действие ответа).
  • Идентификатор взаимодействия – целое число, используемое для сопоставления действия "Запрос вызова" с действием "Ответ вызова".

Вызов действия "Ответ"

Направление: Цель -> Инициатор

После того как целевое устройство получит действие Invoke Request Action, оно завершит транзакцию с помощью действия Invoke Response Action, которое содержит:

  • Ответы на вызов – список ответов на команды или статусов для каждого отправленного запроса на вызов.
  • Идентификатор взаимодействия – целое число, используемое для сопоставления действия Invoke Response Action с действием Invoke Request Action.

Ограничения на вызов без указания времени

Действие Invoke Request Action может быть групповой передачей, но в этом случае должен быть установлен флаг Suppress Response. Это сделано для того, чтобы сеть не была перегружена одновременными ответами от всех участников группы.

Чтобы включить такое поведение, путь, используемый в списке Invoke Requests, может содержать группы или подстановочные знаки, но только в поле Endpoint. Кроме того, если действие является групповой передачей, эта транзакция завершается без ответа.

Транзакции с временными метками

Как и транзакции с записью по времени, транзакции с вызовом по времени начинаются с действия "Запрос по времени".

Последовательность операций при выполнении транзакции с вызовом по расписанию
Рисунок 2. Транзакция с вызовом по расписанию

Действие по истечении времени запроса

Направление: инициатор -> цель

Инициатор начинает транзакцию, отправляя это действие, которое содержит:

  • Время ожидания – сколько миллисекунд транзакция может оставаться открытой. В течение этого периода следующее действие, отправленное инициатором, будет считаться действительным.

После получения действия "Запрос с временной задержкой" целевое устройство должно подтвердить его получение с помощью действия "Ответ о статусе". Когда инициатор получит действие "Ответ о статусе" без ошибок, он отправит действие "Запрос вызова".

Invoke Request Action

То же, что и описанное выше действие Invoke Request Action.

Вызов действия "Ответ"

То же, что и описанное выше действие Invoke Response Action.

Ограничения на вызов по времени

Все команды invoke можно вызывать в рамках взаимодействия с временными ограничениями. Действие "Запрос с временной задержкой", действие "Вызов запроса" и действие "Вызов ответа" предназначены только для Unicast, поэтому их нельзя использовать в качестве групповой передачи в транзакциях с вызовом по расписанию.

Действие Invoke Request Action поддерживает использование путей с группами, а также подстановочных знаков, но действие Invoke Response Action не поддерживает использование подстановочных знаков.