Partilhar via


Configurar opções do cliente MQTT do broker

Importante

Essa configuração requer a modificação do recurso do Broker e só pode ser configurada no momento da 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 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.

A lista completa de configurações disponíveis é encontrada em ClientConfig API reference.

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, edite a advanced.clients seção no recurso Broker. Atualmente, essa substituição só é suportada usando o --broker-config-file sinalizador quando você implanta as Operações IoT do Azure 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 do Azure usando o az iot ops create comando com o --broker-config-file sinalizador, como o seguinte comando (outros parâmetros omitidos para 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 recebidas do editor e removidas uma vez entregues e reconhecidas pelo assinante com um PUBACKarquivo . 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 agente pode armazenar essas mensagens em buffer no disco para economizar memória, mas isso 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. Este é o comportamento predefinido.

    • DropOldest: A mensagem mais antiga na fila é descartada.

O limite só se aplica à fila de saída do assinante, que contém mensagens às quais não foram atribuídas 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 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 receberá 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. Isso pode ocorrer se o assinante processar mensagens lentamente, estiver desconectado ou 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ó são descartadas 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. Isso ajuda a evitar que os assinantes offline usem muita memória, acabando por limpar 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.

Próximos passos