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

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

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

Транзакция вызова без ограничения по времени

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

Вызвать действие запроса

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

Как и в случае с действиями по запросу на чтение и запись, в этом действии инициатор предоставляет целевому устройству:

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

Вызвать действие с ответом

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

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

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

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

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

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

Транзакции вызова по времени

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

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

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

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

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

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

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

Вызвать действие запроса

Аналогично описанному выше действию Вызов запроса.

Вызвать действие с ответом

Аналогично описанному выше действию по вызову ответа.

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

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

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