Planeamento de implantação - Opções avançadas de MQTT

As opções avançadas de MQTT controlam como o corretor MQTT interage com os clientes. Estas definições são negociadas entre o broker e o cliente no momento da conexão e incluem a expiração da sessão, a expiração da mensagem, o máximo de receção e o keep alive. A única configuração específica para as Operações do Azure IoT é o limite da fila de assinantes. Decida antes da implementação se precisa de personalizar estas opções.

Importante

Estas opções só podem ser configuradas na implementação inicial, utilizando a CLI do Azure ou o portal Azure. Para os alterar mais tarde, tem de fazer uma nova implementação. Para mais informações, consulte Personalizar Corretor Padrão.

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, esta substituição só é suportada através da utilização do sinalizador --broker-config-file quando implementa o Operações IoT com o comando az iot ops create. Para mais informações, consulte o suporte da CLI Azure para configuração avançada de corretores MQTT.

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

Para começar, prepare um Broker ficheiro de configuração em formato JSON. Por exemplo:

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

Depois, implemente o IoT Operations usando o az iot ops create comando com a --broker-config-file bandeira. Outros parâmetros são omitidos para brevidade:

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

Limite de fila de assinantes

O corretor MQTT mantém uma fila para cada assinante com mensagens QoS 1 (pelo menos uma entrega) à espera de serem entregues. As mensagens são adicionadas a essa fila quando são recebidas do editor. Eles são removidos depois de serem 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 corretor MQTT pode armazenar estas mensagens no disco para poupar memória, mas o buffering do disco nem sempre está disponível. O buffer de disco pode não estar configurado, ou pode já estar cheio por causa de outros subscritores. O limite da fila de assinantes impede que um único assinante consuma demasiada memória do broker.

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

  • Tamanho: O número máximo de mensagens que podem ficar em fila para um assinante. Se a fila estiver cheia e chegar uma nova mensagem, o corretor emite uma mensagem com base na estratégia configurada.

  • Estratégia: Como o corretor se comporta quando a fila está cheia:

    • Nenhuma (padrão): As mensagens não são descartadas. A fila pode crescer até a sessão terminar.
    • DropOldest: O corretor deixa cair a mensagem mais antiga da fila para dar lugar à nova.

Note

O limite de fila de assinantes aplica-se à fila de saída — mensagens à espera de serem enviadas ao assinante. A fila de mensagens em trânsito (mensagens enviadas, mas ainda não confirmadas pelo assinante) é independente e é regida pela definição do máximo de receção do MQTT.

Importante

Em implementações com várias partições, o número de filas é dimensionado por partição. Cada partição mantém as suas próprias filas de assinantes de forma independente. A memória total em todo o cluster consumida pelas filas de um único assinante pode exceder o que um único limite configurado sugere. Planeie em conformidade a capacidade de memória para implementações com várias partições.

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 durante mais tempo do que maxMessageExpirySeconds, expira. O corretor não elimina ativamente mensagens expiradas — descarta-as quando chegam ao início da fila. Esta limpeza passiva mantém o uso de memória limitado sem escanear a fila.

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, o corretor elimina todas as mensagens da fila dessa sessão. A expiração da sessão impede que os subscritores offline consumam memória indefinidamente, acabando por limpar toda a fila.

Expiração máxima da mensagem e mensagens retidas

No MQTT 5, as mensagens retidas PUBLISH respeitam o intervalo de expiração da mensagem especificado no pacote. Se um intervalo de expiração for definido, a mensagem retida será removida assim que o intervalo terminar. Se nenhum intervalo for fornecido, a mensagem permanecerá disponível indefinidamente.

A maxMessageExpirySeconds configuração define um limite máximo global para a expiração de mensagens, aplicando-se a todas as mensagens, incluindo as retidas. Por exemplo, se maxMessageExpirySeconds estiver definido como 1000 segundos e uma mensagem retida especificar um intervalo de expiração de 2000 segundos, a mensagem ainda será removida após 1000 segundos.

Por defeito, maxMessageExpirySeconds não está definido. Neste caso, as mensagens retidas não expiram a menos que um intervalo de expiração seja explicitamente definido na mensagem.

Passos seguintes