Enrutamiento de mensajes MQTT en Azure Event Grid

Event Grid le permite enrutar los mensajes MQTT a webhooks o servicios de Azure para su posterior procesamiento. En consecuencia, puede crear soluciones de un extremo a otro aprovechando los datos de IoT para el análisis de datos, el almacenamiento y las visualizaciones, entre otros casos de uso.

Diagram of the MQTT message routing.

¿Cómo puedo usar la característica de enrutamiento?

El enrutamiento de los mensajes de los clientes a un servicio de Azure o del punto de conexión personalizado le permite maximizar las ventajas de estos datos. A continuación se muestran algunos de los casos de uso para aprovechar esta característica:

  • Análisis de datos: extraiga y analice los mensajes enrutados de los clientes para optimizar la solución. Por ejemplo, analice la telemetría de las máquinas para predecir cuándo programar el mantenimiento antes de que se produzcan errores para evitar retrasos y daños adicionales.
  • Aplicaciones sin servidor: desencadene una función sin servidor basada en los mensajes enrutados de los clientes. Por ejemplo, cuando un sensor de movimiento detecta un movimiento, envíe una notificación al personal de seguridad para abordarlo.
  • Visualizaciones de datos: cree visualizaciones de los datos enrutados de los clientes para representar y comprender fácilmente los datos, así como resaltar tendencias y valores atípicos.

Configuración de enrutamiento:

La configuración de enrutamiento permite enviar todos los mensajes MQTT de los clientes a un tema de espacio de nombres de Event Grid o a un tema personalizado de Event Grid. Una vez que los mensajes están en el tema, se puede configurar una suscripción de eventos para consumir los mensajes del tema. Siga los siguientes pasos generales para lograr esta configuración:

  • Tema de espacio de nombres como destino de enrutamiento:
    • Cree un tema de espacio de nombres de Event Grid donde se enrutarán todos los mensajes MQTT.
    • Cree una suscripción a eventos de tipo de inserción para enrutar estos mensajes a uno de los servicios de Azure compatibles o a webhooks personalizados o una suscripción de eventos de tipo de cola para extraer los mensajes directamente del tema del espacio de nombres a través de la aplicación.
    • Establezca la configuración de enrutamiento y haga referencia al tema que creó en el primer paso.

Diagram of the MQTT message routing to namespace topics.

Diagram of the MQTT message routing to custom topics.

Nota:

Deshabilitar el acceso a la red pública en el espacio de nombres generará un error en el enrutamiento de MQTT.

Diferencia entre los temas de espacio de nombres y los temas personalizados como destino de enrutamiento

En la tabla siguiente se muestra la diferencia entre los temas de espacio de nombres y los temas personalizados como destino de enrutamiento. Para obtener un desglose detallado de qué cuotas y límites se incluyen en cada recurso de Event Grid, consulta Cuotas y límites.

Punto de comparación Tema de espacio de nombres Tema personalizado
Throughput Alto, hasta 40 MB/s (entrada) y 80 MB/s (salida) Bajo, hasta 5 MB/s (entrada y salida)
Entrega de extracción
Entrega de inserción a Event Hubs Sí (en versión preliminar)
Entrega de inserción a servicios de Azure (Functions, Webhooks, colas y temas de Service Bus, retransmisión de conexiones híbridas y colas de almacenamiento)
Retención de mensajes 7 días 1 día
Requisito de asignación de roles No es necesaria, ya que el MQTT broker y el tema del espacio de nombres están en el mismo espacio de nombres. Obligatorio, ya que el espacio de nombres que hospeda la funcionalidad del MQTT broker y el tema personalizado son recursos diferentes.

Requisitos de temas personalizados de Event Grid para el enrutamiento

El tema personalizado de Event Grid que se usa para el enrutamiento debe cumplir los siguientes requisitos:

  • Debe establecerse para usar el esquema de eventos en la nube v1.0.
  • Debe estar en la misma región que el espacio de nombres.
  • Debe asignar el rol "Remitente de datos de EventGrid" a usted mismo o a la identidad administrada seleccionada en el tema personalizado de Event Grid antes de aplicar la configuración de enrutamiento.
    • En el portal, vaya al recurso de tema de Event Grid que ha creado.
    • En el elemento de menú "Control de acceso (IAM)", seleccione Agregar una asignación de roles.
    • En la pestaña "Rol", seleccione "Remitente de datos de Event Grid" y, a continuación, seleccione Siguiente.
    • En la pestaña "Miembros", seleccione +Seleccionar miembros y escriba su nombre de usuario de AD en el cuadro "Seleccionar" que aparece (por ejemplo, user@contoso.com).
    • Seleccione su nombre de usuario de AD y, a continuación, seleccione "Revisar y asignar".

Configuración de Azure Portal

Siga los siguientes pasos para configurar el enrutamiento:

  • En Azure Portal, vaya a su espacio de nombres.
  • En Enrutamiento, active Habilitar enrutamiento.
  • En tipo de tema, seleccione Tema de espacio de nombres o Tema personalizado.
  • En Tema, seleccione el tema que ha creado donde se enrutarán todos los mensajes MQTT.
  • Si se seleccionó un tema personalizado, aparece la sección Identidad administrada para la entrega. Seleccione una de las siguientes opciones para la identidad que se usará para autenticar el MQTT broker al entregar los mensajes MQTT al tema personalizado:
    • Nota: en este caso, debe asignarse el rol "Remitente de datos de EventGrid" a sí mismo en el tema personalizado.
    • Identidad asignada por el sistema: en este caso, debe habilitar la identidad asignada por el sistema en el espacio de nombres como requisito previo y asignar el rol "Remitente de datos de EventGrid" a la identidad asignada por el sistema en el tema personalizado.
    • Identidad asignada por el usuario: en este caso, debe habilitar la identidad asignada por el usuario en el espacio de nombres como requisito previo y asignar el rol "Remitente de datos de EventGrid" a la identidad seleccionada en el tema personalizado.
      • Si se seleccionó la identidad asignada por el usuario, aparece una lista desplegable que le permite seleccionar la identidad deseada.
  • Seleccione Aplicar.

Screenshot showing the routing configuration through the portal.

Para obtener instrucciones de configuración de enriquecimiento, vaya a Configuración del portal de enriquecimiento.

Configuración de la CLI de Azure

az resource create --resource-type Microsoft.EventGrid/namespaces --id /subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/namespaces/<Namespace Name> --is-full-object --api-version 2023-06-01-preview --properties @./resources/NS.json

NS.json

"properties": {
	"inputSchema": "CloudEventSchemaV1_0",
	"topicSpacesConfiguration": {
	    "state": "Enabled",           
	    "routeTopicResourceId": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/topics/<Event Grid topic name>",
        "routingIdentityInfo": {
                "type": "UserAssigned", //Allowed values: None, SystemAssigned, UserAssigned
                "userAssignedIdentity": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<User-assigned identity>" //needed only if UserAssigned was the value of type
            },

	}
}

Para obtener instrucciones de configuración de enriquecimiento, vaya a Configuración de la CLI de enriquecimiento.

Comportamiento de enrutamiento de mensajes MQTT

Cuando se enrutan mensajes MQTT a temas personalizados, Event Grid proporciona una entrega duradera, ya que intenta entregar cada mensaje al menos una vez inmediatamente. Si se produce un error, Event Grid reintenta la entrega o quita el mensaje que había que enrutar. Event Grid no garantiza el orden de entrega de los eventos, por lo que los suscriptores pueden recibirlos de forma desordenada.

En la siguiente tabla se describe el comportamiento del enrutamiento de mensajes MQTT en función de diferentes errores.

Error Descripción del error Comportamiento
TopicNotFoundError Se eliminó el tema personalizado configurado para recibir todos los mensajes MQTT enrutados. Event Grid quita el mensaje MQTT que había que enrutar.
AuthenticationError Se eliminó el rol Remitente de datos de EventGrid para el tema personalizado configurado como destino para los mensajes MQTT enrutados. Event Grid quita el mensaje MQTT que había que enrutar.
TooManyRequests El número de mensajes enrutados MQTT por segundo supera el límite de publicación del tema personalizado. Event Grid reintenta enrutar el mensaje MQTT.
ServiceError Error inesperado del servidor por alguna cuestión de funcionamiento del servidor. Event Grid reintenta enrutar el mensaje MQTT.

Durante los reintentos, Event Grid usa una directiva de reintentos de retroceso exponencial para el enrutamiento de mensajes MQTT. Event Grid reintenta la entrega en el siguiente horario y cuando sea el mejor momento:

  • 10 segundos
  • 30 segundos
  • 1 minuto.
  • 5 minutos
  • 10 minutos
  • 30 minutos
  • 1 hora
  • 3 horas
  • 6 horas
  • Cada 12 horas

Si se consigue entregar un mensaje MQTT enrutado que se puso en cola para volver a entregarlo, Event Grid hace lo posible por quitar el mensaje de la cola de reintentos, pero puede que se reciban duplicados.

Siguientes pasos:

Para obtener más información sobre el enrutamiento, use los siguientes artículos:

Inicio rápido:

Conceptos: