Настройка параметров клиента MQTT брокера
Внимание
Этот параметр требует изменения ресурса брокера и может быть настроен только во время первоначального развертывания с помощью Azure CLI или портала Azure. Новое развертывание требуется, если необходимы изменения конфигурации брокера. Дополнительные сведения см. в разделе "Настройка брокера по умолчанию".
Расширенные параметры клиента брокера управляют взаимодействием брокера с клиентами MQTT. Эти параметры, согласованные между брокером и клиентом во время подключения, включают истечение срока действия сеанса, срок действия сообщения, максимальное получение и сохранение активности. Единственным параметром , характерным для операций Интернета вещей Azure, является ограничение очереди подписчика.
Полный список доступных параметров находится в справочнике по API ClientConfig .
Во многих сценариях достаточно параметров клиента по умолчанию. Чтобы переопределить параметры клиента по умолчанию для брокера, измените advanced.clients
раздел ресурса Broker. В настоящее время это переопределение поддерживается только с помощью --broker-config-file
флага при развертывании операций Интернета вещей Azure с помощью az iot ops create
команды.
Чтобы приступить к работе, подготовьте файл конфигурации брокера в формате JSON, как показано в следующем примере:
{
"advanced": {
"clients": {
"maxSessionExpirySeconds": 282277,
"maxMessageExpirySeconds": 1622,
"subscriberQueueLimit": {
"length": 1000,
"strategy": "DropOldest"
},
"maxReceiveMaximum": 15000,
"maxKeepAliveSeconds": 300
}
}
}
Затем разверните операции Интернета вещей Azure с помощью az iot ops create
команды с флагом --broker-config-file
, например следующую команду (другие параметры, пропущенные для краткости):
az iot ops create ... --broker-config-file <FILE>.json
Дополнительные сведения см. в статье о поддержке Azure CLI для расширенных примеров конфигурации брокера MQTT и брокера.
Ограничение очереди подписчика
Брокер MQTT сохраняет очередь для каждого подписчика с сообщениями QoS 1, ожидающих доставки. Сообщения добавляются в эту очередь при получении от издателя и удаляются после доставки и подтверждения подписчиком.PUBACK
Если сообщения приходят быстрее, чем подписчик может подтвердить их, или если подписчик находится в автономном режиме с постоянным сеансом, очередь может увеличиться.
Брокер может буферизуть эти сообщения на диск , чтобы сохранить память, но это может быть недостаточно. Буфер диска может не быть настроен или может быть заполнен из-за других подписчиков. Таким образом, ограничение очереди подписчика помогает предотвратить использование брокером слишком большого объема памяти для одного подписчика.
Ограничение очереди подписчика имеет два параметра:
Длина: максимальное количество сообщений, которые могут быть поставлены в очередь для одного подписчика. Если очередь заполнена и появится новое сообщение, брокер удаляет сообщение на основе настроенной стратегии.
Стратегия: стратегия, используемая при заполнении очереди. Две стратегии:
Нет: сообщения не удаляются , если срок действия сеанса истекает, и очередь может увеличиваться на неопределенный срок. Это поведение принимается по умолчанию.
DropOldest: удаляется самое старое сообщение в очереди.
Ограничение применяется только к исходящей очереди подписчика, которая содержит сообщения, которые не были назначены идентификаторами пакетов, так как очередь в полете заполнена. Это ограничение не применяется к очереди в полете.
Так как ограничение применяется для каждой внутренней секции, брокер не может гарантировать общее количество исходящих сообщений для подписчика во всем кластере. Например, установка длины 10 000 не означает, что подписчик получит не более 10 000 сообщений. Вместо этого он может получать сообщения 10,000 * number of partitions * number of backend workers
.
Медленные подписчики
Медленный подписчик — это тот, который не может следить за скоростью входящих сообщений. Это может произойти, если подписчик медленно обрабатывает сообщения, отключается или находится в автономном режиме. Ограничение очереди подписчика помогает предотвратить слишком много памяти для медленного подписчика.
Срок действия сообщения
Параметр maxMessageExpirySeconds
определяет, сколько времени сообщение может оставаться в очереди до истечения срока его действия. Если сообщение остается в очереди дольше максимального срока действия, оно помечается как истекший срок действия. Однако просроченные сообщения удаляются только при достижении начала очереди. Этот механизм пассивного истечения срока действия помогает управлять использованием памяти, гарантируя, что старые сообщения в конечном итоге удаляются.
Срок действия сеанса
Параметр maxSessionExpirySeconds
работает с ограничением очереди подписчика, чтобы гарантировать, что сообщения не хранятся в очереди на неопределенный срок. Если срок действия сеанса истекает, все сообщения в очереди для этого сеанса удаляются. Это помогает предотвратить использование слишком большого объема памяти для автономных подписчиков путем очистки всей очереди.
Срок действия сообщения и срок действия сеанса важны для управления медленными и автономными подписчиками и обеспечения эффективного использования памяти.