Транзакции вызова используются для вызова одной или нескольких команд кластера на целевом узле. Это похоже на вызовы удаленных процедур, выполняемые для команды, определенной в кластере.
Как и транзакции записи, транзакции вызова поддерживают транзакции с ограничением по времени и без него. Дополнительную информацию о транзакциях с ограничением по времени можно найти в разделе Действия с ограничением по времени и без него.
Транзакция вызова без ограничения по времени
Вызвать действие запроса
Направление: инициатор -> цель
Как и в случае с действиями по запросу на чтение и запись, в этом действии инициатор предоставляет целевому устройству:
- Запросы на вызов – список путей к командам кластера, а также необязательные аргументы для команд, называемые полями команд.
- 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. Кроме того, если действие является групповым, эта транзакция завершается без ответа.
Транзакции вызова по времени
Как и транзакции записи по времени, транзакции вызова по времени начинаются с действия запроса по времени.
Действие по запросу с таймером
Направление: инициатор -> цель
Инициатор начинает транзакцию, отправляя это действие, которое содержит:
- Timeout – время в миллисекундах, в течение которого транзакция может оставаться открытой. В течение этого периода следующее действие, отправленное Инициатором, будет считаться действительным.
Получив действие Timed Request Action, целевое устройство должно подтвердить его с помощью действия Status Response Action. Получив ответ о статусе без ошибок, инициатор отправляет действие Invoke Request.
Вызвать действие запроса
Аналогично описанному выше действию Вызов запроса.
Вызвать действие с ответом
Аналогично описанному выше действию по вызову ответа.
Ограничения на вызов по времени
Все команды вызова могут быть вызваны для временного взаимодействия. Действия Timed Request, Invoke Request и Invoke Response поддерживают только Unicast, поэтому их нельзя использовать в качестве групповых в транзакциях Timed Invoke.
Действие Invoke Request поддерживает использование путей с группами, а также подстановочных знаков, но действие Invoke Response не поддерживает использование подстановочных знаков.