1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mqtt-rs-rmqtt

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
web-hook.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 14:56 2a97644

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mqtt-rs-rmqtt.git
git@api.gitlife.ru:oschina-mirror/mqtt-rs-rmqtt.git
oschina-mirror
mqtt-rs-rmqtt
mqtt-rs-rmqtt
master