Compartilhar via


Configurar opções de cliente MQTT do agente

Importante

Essa configuração requer a modificação do recurso do Agente 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 Agente. Para saber mais, confira Personalizar o Agente padrão.

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

A lista completa das configurações disponíveis é encontrada na referência da API ClientConfig.

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

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

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

Em seguida, implante as Operações do Azure IoT usando o comando az iot ops create com o sinalizador --broker-config-file, como o seguinte comando (os outros parâmetros foram omitidos por questões de brevidade):

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

Para saber mais, confira Suporte da CLI do Azure para configuração avançada do Agente MQTT e Exemplos do Agente.

Limite de fila do assinante

O agente do MQTT mantém uma fila para cada assinante com mensagens QoS 1 aguardando a entrega. As mensagens são adicionadas a essa fila quando recebidas do editor e removidas uma vez entregues e confirmadas pelo assinante com um PUBACK. Se as mensagens chegarem mais rápido do que o assinante pode confirmá-las ou se o assinante estiver offline com uma sessão persistente, a fila poderá aumentar.

O agente pode buffer dessas mensagens em disco para salvar memória, mas isso pode nem sempre ser suficiente. O buffer de disco pode não estar configurado ou pode estar cheio devido a outros assinantes. Portanto, o limite de fila do assinante ajuda a impedir que o agente use muita memória para um único assinante.

O limite de fila do assinante 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 agente removerá 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 pode crescer indefinidamente. Esse é o comportamento padrão.

    • DropOldest: a mensagem mais antiga da fila é descartada.

O limite só se aplica à fila de saída do assinante, que contém mensagens que não receberam IDs de pacote porque a fila de pré-lançamento está cheia. Esse limite não se aplica à fila de pré-lançamento.

Como o limite é aplicado por partição de back-end, o agente 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 como 10.000 não significa que o assinante receberá no máximo 10.000 mensagens. Em vez disso, ele pode receber até 10,000 * number of partitions * number of backend workers mensagens.

Assinantes lentos

Um assinante lento é aquele que não consegue acompanhar a taxa de mensagens de entrada. Isso pode ocorrer se o assinante processar mensagens lentamente, estiver desconectado ou estiver offline. O limite de fila do assinante ajuda a impedir que um assinante lento consuma muita memória.

Expiração da mensagem

A configuração maxMessageExpirySeconds 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 configuração maxSessionExpirySeconds funciona com o limite de fila do assinante 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 impedir que assinantes offline usem muita memória ao eventualmente limpar toda a fila.

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

Próximas etapas