События жизненного цикла клиентов MQTT
События жизненного цикла клиента позволяют приложениям реагировать на события о состоянии подключения клиента или операциях ресурсов клиента. Оно предоставляет следующие возможности.
- Отслеживайте состояние подключения клиентов. Например, можно создать приложение, которое анализирует подключения клиентов для оптимизации поведения.
- React с действием по устранению рисков для отключений клиентов. Например, можно создать приложение, которое инициирует поток автоматического устранения рисков или создает запрос в службу поддержки при каждом отключении клиента.
- Отслеживайте пространство имен, к которому подключены ваши клиенты. Например, убедитесь, что клиенты подключены к нужному пространству имен после запуска отработки отказа.
Типы событий
Пространство имен Сетки событий публикует следующие типы событий:
Тип события | Description |
---|---|
Microsoft.EventGrid.MQTTClientSession Подключение | Опубликовано при подключении сеанса клиента MQTT к сетке событий. |
Microsoft.EventGrid.MQTTClientSessionDisconnected | Опубликовано при отключении сеанса клиента MQTT от сетки событий. |
Microsoft.EventGrid.MQTTClientCreatedOrUpdated | Опубликовано при создании или обновлении клиента MQTT в пространстве имен сетки событий. |
Microsoft.EventGrid.MQTTClientDeleted | Опубликовано при удалении клиента MQTT из пространства имен сетки событий. |
Схема событий
События жизненного цикла клиента предоставляют все сведения о клиенте и сеансе, которые были подключены или отключены. Он также предоставляет отключениеReason, который можно использовать для диагностика сценариев, так как позволяет выполнять автоматизированные действия по устранению рисков.
В этом примере события показана схема события, возникающего при подключении сеанса клиента MQTT к сетке событий:
[{
"specversion": "1.0",
"id": "5249c38a-a048-46dd-8f60-df34fcdab06c",
"time": "2023-07-29T01:23:49.6454046Z",
"type": "Microsoft.EventGrid.MQTTClientSessionConnected",
"source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myrg/providers/Microsoft.EventGrid/namespaces/myns",
"subject": "clients/client1/sessions/session1",
"data": {
"namespaceName": "myns",
"clientAuthenticationName": "client1",
"clientSessionName": "session1",
"sequenceNumber": 1
}
}]
В этом примере события показана схема события, возникающего при отключении сеанса клиента MQTT к сетке событий:
[{
"specversion": "1.0",
"id": "e30e5174-787d-4e19-8812-580148bfcf7b",
"time": "2023-07-29T01:27:40.2446871Z",
"type": "Microsoft.EventGrid.MQTTClientSessionDisconnected",
"source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myrg/providers/Microsoft.EventGrid/namespaces/myns",
"subject": "clients/client1/sessions/session1",
"data": {
"namespaceName": "myns",
"clientAuthenticationName": "client1",
"clientSessionName": "session1",
"sequenceNumber": 1,
"disconnectionReason": "ClientInitiatedDisconnect"
}
}]
В этом примере события показана схема события, возникающего при создании или обновлении клиента MQTT в пространстве имен сетки событий:
[{
"specversion": "1.0",
"id": "383d1562-c95f-4095-936c-688e72c6b2bb",
"time": "2023-07-29T01:14:35.8928724Z",
"type": "Microsoft.EventGrid.MQTTClientCreatedOrUpdated",
"source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myrg/providers/Microsoft.EventGrid/namespaces/myns",
"subject": "clients/client1",
"data": {
"createdOn": "2023-07-29T01:14:34.2048108Z",
"updatedOn": "2023-07-29T01:14:34.2048108Z",
"namespaceName": "myns",
"clientName": "client1",
"clientAuthenticationName": "client1",
"state": "Enabled",
"attributes": {
"attribute1": "value1"
}
}
}]
В этом примере события показана схема события, возникающего при удалении клиента MQTT из пространства имен сетки событий:
[{
"specversion": "1.0",
"id": "2a93aaf9-66c2-4f8e-9ba3-8d899c10bf17",
"time": "2023-07-29T01:30:52.5620566Z",
"type": "Microsoft.EventGrid.MQTTClientDeleted",
"source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myrg/providers/Microsoft.EventGrid/namespaces/myns",
"subject": "clients/client1",
"data": {
"namespaceName": "myns",
"clientName": "client1",
"clientAuthenticationName": "client1"
}
}]
Причины отключения:
В следующем списке приведены различные значения для отключенияReason и их описание:
Причина отключения | Description |
---|---|
ClientAuthenticationError | клиент был отключен по любым причинам проверки подлинности (например, срок действия сертификата истек, клиент отключен или изменена конфигурация клиента). |
ClientAuthorizationError | Клиент был отключен по каким-либо причинам авторизации (например, из-за изменения конфигурации пространств разделов, привязок разрешений или групп клиентов) |
ClientError | Клиент отправил неправильный запрос или использовал одну из неподдерживаемых функций, которые привели к прекращению подключения службой. |
ClientInitiatedDisconnect | Клиент инициирует корректное отключение с помощью пакета DISCONNECT для MQTT или близкого кадра для MQTT через WebSocket. |
Подключение ionLost | Подключение к клиентскому серверу потеряно. |
IpForbidden | IP-адрес клиента блокируется фильтром IP-адресов или конфигурацией приватных ссылок. |
QuotaExceeded | Клиент превысил один или несколько ограничений регулирования, которые привели к прекращению подключения службой. |
ServerError | подключение было завершено из-за непредвиденной ошибки сервера |
ServerInitiatedDisconnect | Сервер инициирует корректное отключение по любой операционной причине. |
SessionOverflow | очередь клиента для ненавзированных сообщений QoS1 достигла предела, что привело к прекращению подключения сервером |
SessionTakenOver | клиент повторно подключился с тем же именем проверки подлинности, что привело к прекращению предыдущего подключения. |
Подробное описание каждого свойства см . в схеме событий для пространства имен сетки событий.
Совет
Обработка высокой частоты колебаний состояний подключения: при получении события отключения клиента подождите период (например, 30 секунд) и убедитесь, что клиент по-прежнему находится в автономном режиме перед принятием действия по устранению неполадок. Эта оптимизация повышает эффективность обработки быстро изменяющихся состояний.
Настройка
Настройка портала Azure
Чтобы вывести события жизненного цикла клиента, выполните следующие действия.
- В пространстве имен перейдите на вкладку "События".
- Выберите +Подписка на события.
- Укажите имя подписки сетки событий.
- Выберите схему событий, которую вы предпочитаете для потребления событий.
- Фильтрация событий в типах событий.
- Заполните сведения о конечной точке.
- Нажмите кнопку создания.
Настройка Azure CLI
Чтобы вывести события жизненного цикла клиента, выполните следующие действия.
- Создание системного раздела
az eventgrid system-topic create --resource-group <Resource Group > --name <System Topic Name> --location \<Region> --topic-type Microsoft.EventGrid.Namespaces --source /subscriptions//resourceGroups/<Resource Group >/providers/Microsoft.EventGrid/namespaces/<Namespace Name>
- Создание подписки сетки событий
az eventgrid system-topic event-subscription create --name <Specify Event Subscription Name> -g <Resource Group> --system-topic-name <System Topic Name> --endpoint <Endpoint>
Модель поведения:
- Нет гарантии задержки для событий жизненного цикла клиента. События состояния подключения клиента указывают последнее состояние подключения сеанса клиента, а не состояние подключения в режиме реального времени.
- Могут быть опубликованы повторяющиеся события жизненного цикла клиента.
- Метка времени жизненного цикла клиента указывает, когда служба обнаружила события, которые могут отличаться от фактического времени события.
- Порядок событий жизненного цикла клиента не гарантируется, события могут поступать из порядка. Однако порядковый номер событий состояния подключения можно использовать для определения исходного порядка событий.
- Для события создания или обновления клиента и события удаления клиента:
- Если в течение короткого периода времени в ресурсе клиента изменяется несколько состояний, то для окончательного состояния клиента будет возникать одно событие.
- Пример 1. Если клиент создается, то обновляется дважды в течение 3 секунд, EG выдает только одно событие MQTTClientCreatedOrUpdated с конечными значениями метаданных клиента.
- Пример 2. Если клиент создается, то удаляется в течение 5 секунд, EG выдает только событие MQTTClientDeleted.
Упорядочить события состояния подключения:
Порядковый номер для событий MQTTClientSession Подключение ed и MQTTClientSessionDisconnected можно использовать для определения последнего состояния подключения сеанса клиента, так как порядковый номер увеличивается с каждым новым событием. Порядковый номер для MQTTClientSessionDisconnected всегда совпадает с порядковым номером события MQTTClientSession Подключение ed для того же подключения. Например, список событий и порядковых номеров ниже — это пример событий в правильном порядке для того же клиента:
- MQTTClientSession Подключение ed > "sequenceNumber": 1
- MQTTClientSessionDisconnected > "sequenceNumber": 1
- MQTTClientSession Подключение ed > "sequenceNumber": 2
- MQTTClientSessionDisconnected > "sequenceNumber": 2
Ниже приведен пример логики для упорядочивания событий: для каждого клиента:
- Сохраните порядковый номер и состояние подключения из первого события.
- Для каждого нового события MQTTClientSession Подключение ed:
- Если новый номер последовательности больше предыдущего, обновите номер последовательности и состояние подключения, чтобы соответствовать новому событию.
- Для каждого нового события MQTTClientSessionDisconnected:
- Если новый номер последовательности равен или больше предыдущего, обновите номер последовательности и состояние подключения, чтобы соответствовать новому событию.
Следующие шаги
- Дополнительные сведения о системных разделах см. в разделе "Системные разделы" в Сетка событий Azure
- Дополнительные сведения о свойствах события жизненного цикла клиента см. в службе "Сетка событий" в качестве источника сетки событий.