Visão geral das assinaturas compartilhadas no Grade de Eventos do Azure MQTT Broker

Assinaturas compartilhadas no Grade de Eventos do Azure MQTT Broker são um padrão de mensagens que permite que vários clientes consumam mensagens de uma única assinatura de tópico como um grupo, permitindo que o agente distribua mensagens entre clientes de maneira balanceada de carga. Em vez de cada assinante receber cada mensagem, apenas um cliente dentro do grupo compartilhado recebe cada mensagem, melhorando a escalabilidade e a taxa de transferência para sistemas de processamento de back-end.

Como funcionam as assinaturas compartilhadas

Em uma assinatura MQTT padrão, cada cliente inscrito recebe uma cópia de cada mensagem. Com assinaturas compartilhadas, o agente trata um grupo de clientes como um único assinante lógico e distribui mensagens entre eles.

  • Cada mensagem de aplicativo correspondente ao filtro compartilhado é entregue a apenas uma sessão ativa dentro do grupo
  • A distribuição normalmente é balanceada por carga de maneira aleatória dentro do grupo
  • Uma sessão de cliente pode conter assinaturas compartilhadas e não compartilhadas simultaneamente
  • Vários grupos podem assinar o mesmo tópico de forma independente

Formato de tópico de assinatura compartilhada

As assinaturas compartilhadas usam o seguinte formato:

$share/{group-name}/{topic-filter}

Componentes:

  • $share → identifica uma assinatura compartilhada
  • {group-name} → grupo de consumidores lógicos
  • {topic-filter} tópico → ou assinatura curinga

Exemplo:

$share/order-processors/retail/orders/#

Características principais

  • Consumo com balanceamento de carga: as mensagens são distribuídas entre clientes no mesmo grupo para garantir um processamento eficiente.
  • Escalabilidade horizontal: os consumidores podem escalar horizontalmente de forma independente sem afetar os editores.
  • Grupos de consumidores independentes: vários grupos compartilhados recebem as mesmas mensagens de forma independente durante o balanceamento interno.
  • Suporte a assinatura mista: um cliente pode manter assinaturas compartilhadas e não compartilhadas na mesma sessão.

Cenário de exemplo: processamento de pedidos de varejo

Considere um cenário de processamento de pedidos de varejo usando o Broker MQTT da Grade de Eventos.

  • Tópico: retail/orders
  • Grupo compartilhado: order-workers
  • Clientes: Worker1, Worker2, Worker3

Fluxo:

  1. Os pedidos são publicados em retail/orders
  2. Todos os trabalhadores assinam: $share/order-workers/retail/orders
  3. O MQTT Broker do Event Grid distribui:
    • Pedido 1 → Trabalhador1
    • Pedido 2 → Trabalhador2
    • Pedido 3 → Trabalhador3

Cada ordem é processada uma vez, enquanto o sistema se dimensiona horizontalmente.

Diagrama do MQTT Broker do Event Grid distribuindo três pedidos de varejo para três trabalhadores usando o grupo de assinatura compartilhada 'order-workers'.

Comportamento e restrições de protocolo

Suporte à versão do MQTT

  • Recurso exclusivo do MQTT 5
  • Os clientes MQTT 3.1.1 que tentarem $share/... serão desconectados.

Semântica de entrega de mensagens

  • Cada mensagem é entregue a um cliente por grupo
  • A entrega segue a semântica de pelo menos uma vez (QoS 1)

Ordenação de mensagens

  • Nenhuma garantia de ordenação estrita entre os membros do grupo

Comportamento da sessão

  • A expiração da sessão afeta a entrega de mensagens:
    • Se um cliente se desconectar e a sessão expirar, as mensagens poderão ser reatribuídas
    • Sessões persistentes melhoram a confiabilidade

Casos de uso no Corretor MQTT do Event Grid

As assinaturas compartilhadas são ideais para:

  • Processamento de telemetria de IoT de alta capacidade: distribua telemetria ou eventos por vários serviços de processamento.
  • Pools/microsserviços de trabalho de back-end: permitir que os serviços sem estado processem eventos sem duplicação.
  • Consumidores de Namespace Unificado (UNS): consomem fluxos de dados industriais com alta taxa de transferência de forma eficiente.

Quando usar assinaturas compartilhadas

Use assinaturas compartilhadas quando:

  • Você precisa de processamento de mensagens paralelas.
  • Um único consumidor não pode lidar com a carga.
  • Você deseja arquiteturas escalonáveis e resilientes.
  • Você deseja evitar a criação de balanceamento de carga personalizado.

Diagrama mostrando a assinatura compartilhada em que um tópico distribui mensagens entre vários consumidores para processamento paralelo.