Partilhar via


Configurar opções do cliente MQTT do broker

Importante

Essa configuração requer que você modifique o recurso Broker. Ele é configurado somente na implantação inicial usando a CLI do Azure ou o portal do Azure. Uma nova implantação será necessária se forem necessárias alterações na configuração do Broker. Para saber mais, consulte Personalizar o corretor padrão.

As opções avançadas do cliente do broker MQTT controlam como o broker interage com os clientes MQTT. Essas configurações, negociadas entre o broker e o cliente durante a conexão, incluem expiração da sessão, expiração da mensagem, recebimento máximo e manutenção ativa. A única configuração específica para as Operações do Azure IoT é o limite da fila de assinantes.

Para obter a lista completa de configurações disponíveis, consulte a referência da API ClientConfig .

Em muitos cenários, as configurações padrão do cliente são suficientes. Para substituir as configurações padrão do cliente para o broker MQTT, edite a advanced.clients seção no recurso Broker. Atualmente, essa substituição é suportada apenas usando o sinalizador quando você implanta --broker-config-file Operações IoT usando o az iot ops create comando.

Para começar, prepare um arquivo de configuração do Broker no formato JSON, como o exemplo a seguir:

{
  "advanced": {
    "clients": {
      "maxSessionExpirySeconds": 282277,
      "maxMessageExpirySeconds": 1622,
      "subscriberQueueLimit": {
        "length": 1000,
        "strategy": "DropOldest"
      },
      "maxReceiveMaximum": 15000,
      "maxKeepAliveSeconds": 300
    }
  }
}

Em seguida, implante as Operações IoT usando o az iot ops create comando com o --broker-config-file sinalizador, como o comando a seguir. (Outros parâmetros são omitidos por uma questão de brevidade.)

az iot ops create ... --broker-config-file <FILE>.json

Para saber mais, consulte Suporte da CLI do Azure para configuração avançada do agente MQTT e exemplos de Broker.

Limite de fila de assinantes

O broker MQTT mantém uma fila para cada assinante com mensagens QoS 1 aguardando para serem entregues. As mensagens são adicionadas a essa fila quando são recebidas do editor. Eles são removidos depois de entregues e reconhecidos pelo assinante com uma mensagem PUBACK. Se as mensagens chegarem mais rápido do que o assinante pode reconhecê-las, ou se o assinante estiver offline com uma sessão persistente, a fila poderá aumentar.

O broker MQTT pode armazenar essas mensagens em buffer no disco para economizar memória, mas essa tática nem sempre é suficiente. O buffer de disco pode não estar configurado ou pode estar cheio devido a outros assinantes. Portanto, o limite da fila de assinantes ajuda a evitar que o broker use muita memória para um único assinante.

O limite da fila de assinantes tem duas configurações:

  • Comprimento: o número máximo de mensagens que podem ser enfileiradas para um único assinante. Se a fila estiver cheia e uma nova mensagem chegar, o broker descartará a mensagem com base na estratégia configurada.

  • Estratégia: A estratégia a ser usada quando a fila estiver cheia. As duas estratégias são:

    • Nenhum: as mensagens não são descartadas a menos que a sessão expire e a fila possa crescer indefinidamente. Esse comportamento é o padrão.
    • DropOldest: A mensagem mais antiga na fila é descartada.

O limite se aplica apenas à fila de saída do assinante, que contém mensagens que não receberam IDs de pacote porque a fila de bordo está cheia. Esse limite não se aplica à fila de voo.

Como o limite é aplicado por partição de back-end, o broker MQTT não pode garantir o número total de mensagens de saída para um assinante em todo o cluster. Por exemplo, definir o comprimento para 10.000 não significa que o assinante recebe no máximo 10.000 mensagens. Em vez disso, poderia receber até 10,000 * number of partitions * number of backend workers mensagens.

Subscritores lentos

Um assinante lento é aquele que não consegue acompanhar a taxa de mensagens recebidas. Esse problema pode ocorrer se o assinante processa mensagens lentamente, está desconectado ou está offline. O limite da fila de assinantes ajuda a evitar que um assinante lento consuma muita memória.

Expiração da mensagem

A maxMessageExpirySeconds configuração controla por quanto tempo uma mensagem pode permanecer na fila antes de expirar. Se uma mensagem permanecer na fila por mais tempo do que o tempo máximo de expiração, ela será marcada como expirada. No entanto, as mensagens expiradas são descartadas somente quando chegam ao início da fila. Esse mecanismo de expiração passiva ajuda a gerenciar o uso da memória, garantindo que as mensagens antigas sejam eventualmente removidas.

Expiração da sessão

A maxSessionExpirySeconds configuração funciona com o limite da fila de assinantes para garantir que as mensagens não sejam mantidas na fila indefinidamente. Se uma sessão expirar, todas as mensagens na fila dessa sessão serão descartadas. Essa prática ajuda a evitar que os assinantes offline usem muita memória, eventualmente limpando toda a fila.

Tanto a expiração da mensagem quanto a expiração da sessão são importantes para gerenciar assinantes lentos e offline e garantir o uso eficiente da memória.