WebHook
WebHook — это функция, предоставляемая плагином rmqtt-web-hook, который позволяет уведомлять веб-сервис о событиях в RMQTT.
WebHook внутренне реализован на основе хуков, но он ближе к верхнему слою. Он фиксирует различные события в RMQTT, прикрепляя функции обратного вызова к хукам, и перенаправляет их на веб-сервер, настроенный в rmqtt-web-hook.
На примере события «client.connected» процесс распространения события выглядит следующим образом:
Клиент | RMQTT | rmqtt-web-hook | HTTP +------------+
=============>| - - - - - - -> - - - - - - - ->===========> | Веб-сервер |
| Брокер | | Запрос +------------+
Совет:
Обработка событий WebHook является однонаправленной, поскольку она поддерживает только отправку событий из RMQTT на веб-службу и не касается ответа от веб-службы. С помощью WebHook можно выполнять различные бизнес-задачи, такие как запись состояния устройства в сети/вне сети, подписка и хранение сообщений, подтверждение доставки сообщений и многое другое.
rmqtt-web-hook
plugins/rmqtt-web-hook.toml
Файл конфигурации для WebHook находится по адресу etc/plugins/rmqtt-web-hook.toml.
Содержимое тела HTTP-запроса представлено в формате JSON, а атрибут полезной нагрузки закодирован в BASE64.
##--------------------------------------------------------------------
## rmqtt-web-hook
##--------------------------------------------------------------------
## http
# Method: POST
# Body: <JSON>
# Payload: BASE64
## file
# None
#
## Hook general config
# Поскольку WebHook запускает отдельную среду выполнения Tokio, необходимо указать количество основных рабочих потоков, разрешённых для этой среды выполнения.
worker_threads = 3
# Ёмкость очереди сообщений.
queue_capacity = 300_000
# Максимальное количество параллельных HTTP-запросов WebHook для отправки.
concurrency_limit = 128
## Default urls, supports http and file protocols
# Адрес(а) URL-адреса WebHook по умолчанию, которые можно указать с несколькими адресами.
#urls = ["file:///var/log/rmqtt/hook.log", "http://127.0.0.1:5656/mqtt/webhook"]
urls = ["file:///var/log/rmqtt/hook.log"]
## Http config
# Время ожидания для HTTP-запросов.
http_timeout = "8s"
# Этот параметр конфигурации устанавливает максимальное время отсрочки повтора. Если HTTP-запрос завершится неудачно, он будет повторён примерно через 2, 4, 7, 11, 18 или 42 секунды позже.
retry_max_elapsed_time = "60s"
# Коэффициент повтора, по умолчанию равный 2,5.
retry_multiplier = 2.5
В etc/plugins/rmqtt-web-hook.toml
правила триггера можно настроить в следующем формате:
Rule:
rule.<Событие> = [<Правило 1>, <Правило 2>, ..., <Правило n>]
rule.<Событие> = [{действие=<Действие>, urls=[...], темы=[...]}]
Например:
rule.session_created = [{action = "session_created" } ]
rule.session_terminated = [{action = "session_terminated" } ]
rule.session_subscribed = [{action = "session_subscribed" , темы=["x/y/z", "foo/#"] } ]
rule.session_unsubscribed = [{action = "session_unsubscribed" , темы=["x/y/z", "foo/#"] } ]
rule.client_connect = [{action = "client_connect"}]
rule.client_connack = [{action = "client_connack"} ]
rule.client_connected = [{action = "client_connected"}, {action = "client_connected_2", urls = ["http://127.0.0.1:5657/mqtt/webhook"] } ]
rule.client_disconnected = [{action = "client_disconnected" } ]
rule.client_subscribe = [{action = "client_subscribe", темы=["x/y/z", "foo/#"]} ]
rule.client_unsubscribe = [{action = "client_unsubscribe", темы=["x/y/z", "foo/#"] } ]
rule.message_publish
``` **client_connected**
| Ключ | Тип | Описание |
| --- | --- | ------------------------------------------------- |
| action | string | Название события<br>По умолчанию: «client_connected» |
| node | integer | Идентификатор узла |
| ipaddress | string | Исходный IP-адрес и порт клиента |
| clientid | string | Идентификатор клиента |
| username | string | Имя пользователя клиента; «undefined», если не существует |
| keepalive | integer | Запрошенное время поддержки активности клиентом |
| proto_ver | integer | Номер версии протокола |
| clean_session | bool | Флаг сохранения сеанса (MQTT 3.1, 3.1.1) |
| clean_start | bool | Флаг чистого старта сеанса (MQTT 5.0) |
| connected_at | integer | Отметка времени в миллисекундах, когда соединение было установлено |
| session_present | bool | Указывает, присутствует ли постоянный сеанс |
| time | string | Время создания информации о подключении, формат: %Y-%m-%d %H:%M:%S%.3f |
**client_disconnected**
| Ключ | Тип | Описание |
|---|---|---|
| action | string | Название события<br>По умолчанию: «client_disconnected» |
| node | integer | Идентификатор узла |
| ipaddress | string | Исходный IP-адрес и порт клиента |
| clientid | string | Идентификатор клиента |
| username | string | Имя пользователя клиента; «undefined», если не существует |
| disconnected_at | integer | Метка времени в миллисекундах, когда произошло отключение |
| reason | string | Причина отключения |
| time | string | Время создания информации об отключении, формат: %Y-%m-%d %H:%M:%S%.3f |
**client_subscribe**
| Ключ | Тип | Описание |
|---|---|---|
| action | string | Название события<br>По умолчанию: «client_subscribe» |
| node | integer | Идентификатор узла |
| ipaddress | string | Исходный IP-адрес и порт клиента |
| clientid | string | Идентификатор клиента |
| username | string | Имя пользователя клиента; «undefined», если не существует |
| topic | string | Подписанная тема |
| opts | json | Опции подписки |
| time | string | Время создания информации о подписке, формат: %Y-%m-%d %H:%M:%S%.3f |
opts содержит
| Ключ | Тип | Описание |
|---|---|---|
| qos | enum | Уровень QoS; может быть 0, 1 или 2 |
**client_unsubscribe**
| Ключ | Тип | Описание | **message_publish**
| Ключ | Тип | Описание |
| --- | --- | ------------------------------------------------------------- |
| action | string | Название события<br>По умолчанию: «message_publish» |
| from_node | integer | Идентификатор узла клиента, который публикует сообщение |
| from_ipaddress | string | Исходный IP-адрес и порт клиента, который публикует сообщение |
| from_clientid | string | Идентификатор клиента, который публикует сообщение |
| from_username | string | Имя пользователя клиента, который публикует сообщение; «undefined», если оно не существует |
| dup | bool | Указывает, является ли сообщение дубликатом |
| retain | bool | Указывает, следует ли сохранить сообщение |
| qos | enum | Уровень QoS; может быть 0, 1 или 2 |
| topic | string | Тема сообщения |
| packet_id | string | ID сообщения |
| payload | string | Полезная нагрузка сообщения |
| ts | integer | Отметка времени в миллисекундах, когда было получено сообщение Publish |
| time | string | Время создания информации о хуке, формат: %Y-%m-%d %H:%M:%S%.3f |
**message_delivered**
| Ключ | Тип | Описание |
| --- | --- | -------------------------------------------------------------------- |
| action | string | Название события<br>По умолчанию: «message_delivered» |
| from_node | integer | Идентификатор узла клиента, который публикует сообщение |
| from_ipaddress | string | Исходный IP-адрес и порт клиента, который публикует сообщение |
| from_clientid | string | Идентификатор клиента, который публикует сообщение |
| from_username | string | Имя пользователя клиента, который публикует сообщение; «undefined», если оно не существует |
| node | integer | Идентификатор узла |
| ipaddress | string | IP-адрес источника и порт клиента |
| clientid | string | Идентификатор клиента |
| username | string | Имя пользователя клиента; «undefined», если оно не существует |
| dup | bool | Указывает, является ли сообщение дубликатом |
| retain | bool | Указывает, следует ли сохранить сообщение |
| qos | enum | Уровень QoS; может быть 0, 1 или 2 |
| topic | string | Тема сообщения |
| packet_id | string | ID сообщения |
| payload | string | Полезная нагрузка сообщения |
| pts | integer | Отметка времени в миллисекундах, когда было получено сообщение Publish |
| ts | integer | Отметка времени в миллисекундах, когда был создан этот хук сообщения |
| time | string | Время создания информации о хуке, формат: %Y-%m-%d %H:%M:%S%.3f |
**message_acked**
| Ключ | Тип | Описание |
| --- | --- | ---------------------------------------------------------------- |
| action | string | Название события<br>По умолчанию: «message_acked» |
| from_node | integer | Идентификатор узла клиента, который публикует сообщение |
| from_ipaddress | string | Исходный IP-адрес и порт клиента, который публикует сообщение |
| from_clientid | string | Идентификатор клиента, который публикует сообщение | **message_dropped**
| Ключ | Тип | Описание |
| --- | --- | ---------------------------------------------------------------|
| action | строка | Название события<br>По умолчанию: «message_dropped» |
| from_node | целое число | Идентификатор узла клиента, опубликовавшего сообщение |
| from_ipaddress | строка | Исходный IP-адрес и порт клиента, отправившего сообщение |
| from_clientid | строка | Идентификатор клиента, отправившего сообщение |
| from_username | строка | Имя пользователя клиента, отправившего сообщение; «undefined», если оно не существует |
| node | целое число | Идентификатор узла (необязательно) |
| ipaddress | строка | Исходный IP-адрес и порт клиента (необязательно) |
| clientid | строка | Идентификатор клиента (необязательно) |
| username | строка | Имя пользователя клиента; «undefined», если оно не существует (необязательно) |
| dup | логическое значение | Указывает, является ли сообщение дубликатом |
| retain | логическое значение | Указывает, следует ли сохранить сообщение |
| qos | перечисление | Уровень QoS; может быть 0, 1 или 2 |
| topic | строка | Тема сообщения |
| packet_id | строка | ID сообщения |
| payload | строка | Полезная нагрузка сообщения |
| reason | строка | Причина удаления сообщения |
| pts | целое число | Отметка времени в миллисекундах, когда было получено сообщение Publish |
| ts | целое число | Метка времени в миллисекундах, когда это сообщение хука было сгенерировано |
| time | строка | Время создания информации о хуке, формат: %Y-%m-%d %H:%M:%S%.3f |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )