Introducción a las suscripciones compartidas en Azure Event Grid MQTT Broker

Suscripciones compartidas en Azure Event Grid MQTT Broker son un patrón de mensajería que permite a múltiples clientes consumir mensajes de una sola suscripción de tema como un grupo, consiguiendo que el agente distribuya mensajes entre los clientes de forma equilibrada. En lugar de cada suscriptor que recibe cada mensaje, solo un cliente del grupo compartido recibe cada mensaje, lo que mejora la escalabilidad y el rendimiento de los sistemas de procesamiento de back-end.

Funcionamiento de las suscripciones compartidas

En una suscripción de MQTT estándar, cada cliente suscrito recibe una copia de cada mensaje. Con las suscripciones compartidas, el agente trata a un grupo de clientes como un único suscriptor lógico y distribuye los mensajes entre ellos.

  • Cada mensaje de aplicación que coincida con el filtro compartido se entrega solo a una sesión activa dentro del grupo.
  • Normalmente, la distribución de carga se equilibra de forma aleatoria dentro del grupo.
  • Una sesión de cliente puede contener suscripciones compartidas y no compartidas simultáneamente
  • Varios grupos pueden suscribirse al mismo tema de forma independiente

Formato de tema de suscripción compartida

Las suscripciones compartidas usan el siguiente formato:

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

Componentes:

  • $share → Identifica una suscripción compartida
  • {group-name} → grupo de consumidores lógicos
  • {topic-filter} → tema o suscripción con caracteres comodín

Ejemplo:

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

Características clave

  • Consumo con equilibrio de carga: los mensajes se distribuyen entre los clientes del mismo grupo para garantizar un procesamiento eficaz.
  • Escalabilidad horizontal: los consumidores pueden escalar horizontalmente de forma independiente sin afectar a los publicadores.
  • Grupos de consumidores independientes: varios grupos reciben los mismos mensajes de forma independiente, manteniendo un equilibrio interno.
  • Compatibilidad con suscripciones mixtas: un cliente puede mantener suscripciones compartidas y no compartidas en la misma sesión.

Escenario de ejemplo: Procesamiento de pedidos minoristas

Considere un escenario de procesamiento de pedidos minoristas mediante Event Grid MQTT Broker:

  • Tema: retail/orders
  • Grupo compartido: order-workers
  • Clientes: Worker1, Worker2, Worker3

Flujo:

  1. Los pedidos se publican en retail/orders
  2. Todos los trabajadores se suscriben a: $share/order-workers/retail/orders
  3. Event Grid MQTT Broker distribuye:
    • Pedido 1 → Trabajador1
    • Pedido 2 → Trabajador2
    • Pedido 3 → Trabajador3

Cada pedido se procesa una vez, mientras que el sistema se escala horizontalmente.

Diagrama de Event Grid MQTT Broker que distribuye tres pedidos comerciales a tres trabajadores mediante trabajos de pedido de grupo de suscripciones compartidos.

Comportamiento y restricciones del protocolo

Compatibilidad con la versión MQTT

  • Funcionalidad exclusiva de MQTT 5.
  • Los clientes MQTT 3.1.1 que intentan $share/... se desconectarán

Semántica de entrega de mensajes

  • Cada mensaje se entrega a un cliente por grupo
  • La entrega sigue la semántica al menos una vez (QoS 1)

Orden de los mensajes

  • Ninguna garantía de ordenación estricta entre los miembros del grupo

Comportamiento de la sesión

  • La expiración de la sesión afecta a la entrega de mensajes:
    • Si un cliente se desconecta y expira la sesión, es posible que se vuelvan a asignar mensajes.
    • Las sesiones persistentes mejoran la confiabilidad

Casos de uso en Event Grid MQTT Broker

Las suscripciones compartidas son ideales para:

  • Procesamiento de telemetría de IoT de alto rendimiento: distribuya datos de telemetría o eventos entre varios servicios de procesamiento.
  • Grupos de trabajo de back-end/microservicios: Permite que los servicios sin estado procesen eventos sin duplicación.
  • Consumidores del espacio de nombres unificado (UNS): consuman eficientemente flujos de datos industriales de alto rendimiento.

Cuándo usar suscripciones compartidas

Use suscripciones compartidas cuando:

  • Necesita procesamiento de mensajes paralelos.
  • Un único consumidor no puede controlar la carga.
  • Quiere arquitecturas escalables y resistentes.
  • Quiere evitar la implementación de balanceo de carga personalizado.

Diagrama que muestra una suscripción compartida en la que un tema distribuye los mensajes entre varios consumidores para el procesamiento paralelo.