Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
- Los pedidos se publican en
retail/orders - Todos los trabajadores se suscriben a:
$share/order-workers/retail/orders - 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.
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.