Uso del enrutamiento de mensajes de IoT Hub para enviar mensajes del dispositivo a la nube a distintos puntos de conexión

Nota

Algunas de las características que se mencionan en este artículo, como la mensajería de la nube al dispositivo, los dispositivos gemelos y la administración de dispositivos, solo están disponibles en el nivel estándar de IoT Hub. Para obtener más información sobre los niveles Básico y Estándar o Gratis de IoT Hub, consulte Elección del nivel adecuado de IoT Hub para la solución.

El enrutamiento de mensajes le permite enviar mensajes desde los dispositivos a los servicios en la nube de forma automatizada, escalable y confiable. El enrutamiento de mensajes se puede usar para:

  • Enviar mensajes de telemetría y eventos del dispositivo, así como eventos, es decir, eventos del ciclo de vida del dispositivo, eventos de cambio de dispositivo gemelo, eventos de cambio de gemelo digital y eventos de estado de conexión del dispositivo al punto de conexión integrado y los puntos de conexión personalizados. Obtenga información sobre los puntos de conexión de enrutamiento. Para más información acerca de los eventos enviados desde los dispositivos de IoT Plug and Play, consulte Información de Digital Twins de IoT Plug and Play.

  • Filtrar los datos antes de enrutarlos a los diferentes puntos de conexión mediante la aplicación de consultas enriquecidas. El enrutamiento de mensajes le permite realizar consultas sobre las propiedades de los mensajes y el cuerpo del mensaje, así como las etiquetas del dispositivo gemelo y las propiedades del dispositivo gemelo. Más información sobre el uso de consultas en el enrutamiento de mensajes.

IoT Hub necesita acceso de escritura a estos puntos de conexión de servicio para que el enrutamiento de mensajes funcione. Si configura los puntos de conexión a través de Azure Portal, se agregan los permisos necesarios automáticamente. Asegúrese de configurar los servicios para admitir el rendimiento esperado. Por ejemplo, si usa Event Hubs como punto de conexión personalizado, debe configurar las unidades de procesamiento para ese centro de eventos de forma que pueda controlar la entrada de eventos que planea enviar a través del enrutamiento de mensajes de IoT Hub. Del mismo modo, cuando se usa una cola de Service Bus como punto de conexión, debe configurar el tamaño máximo para asegurarse de que la cola puede contener todos los datos ingresados, hasta que los consumidores los extraigan. Al configurar la solución de IoT por primera vez, es posible que deba supervisar los demás puntos de conexión y realizar los ajustes necesarios para la carga real.

IoT Hub define un formato común para todos los mensajes del dispositivo a la nube a fin de generar interoperabilidad entre protocolos. Si un mensaje coincide con varias rutas que señalan al mismo punto de conexión, IoT Hub entrega el mensaje a ese punto de conexión solo una vez. Por lo tanto, no es necesario configurar la desduplicación en la cola o el tema de Service Bus. Use este tutorial para aprender a configurar el enrutamiento de mensajes.

Puntos de conexión de enrutamiento

Un centro de IoT tiene un punto de conexión integrado predeterminado (mensajes y eventos) que es compatible con Event Hubs. Puede crear puntos de conexión personalizados a los que enrutar mensajes. Para ello, vincule otros servicios de la suscripción al centro de IoT.

Cada mensaje se enruta a todos los puntos de conexión cuyas consultas se correspondan con el mensaje. En otras palabras, un mensaje se puede enrutar a varios puntos de conexión.

Si el punto de conexión personalizado tiene configuraciones de firewall, considere la posibilidad de usar excepciones propias de confianza de Microsoft.

IoT Hub admite actualmente los siguientes puntos de conexión:

  • Punto de conexión integrado
  • Contenedores de almacenamiento
  • Colas de Service Bus y temas de Service Bus
  • Event Hubs
  • Cosmos DB (versión preliminar)

Punto de conexión integrado como punto de conexión de enrutamiento

Puede usar la integración y los SDK de Event Hubs estándar para recibir mensajes del dispositivo a la nube desde el punto de conexión integrado (mensajes y eventos). Una vez que se crea una ruta, los datos dejan de fluir al punto de conexión integrado, a menos que se cree una ruta a ese punto de conexión. Aunque no se cree ninguna ruta, se debe habilitar una ruta de reserva para enrutar los mensajes al punto de conexión integrado. La reserva está habilitada de forma predeterminada si crea el centro mediante el portal o la CLI.

Azure Storage como punto de conexión de enrutamiento

Hay dos servicios de almacenamiento a los que IoT Hub puede enrutar mensajes: a cuentas de Azure Blob Storage y Azure Data Lake Storage Gen2 (ADLS Gen2). Las cuentas de Azure Data Lake Storage son cuentas de almacenamiento habilitadas para espacios de nombres jerárquicos que se basan en Blob Storage. Ambas usan blobs para su almacenamiento.

IoT Hub admite la escritura de datos en Azure Storage con los formatos Apache Avro y JSON. El valor predeterminado es AVRO. Cuando se usa la codificación JSON, debe establecer la propiedad contentType en application/json y la propiedad contentEncoding en UTF-8 en las propiedades del sistema del mensaje. Ambos valores no distinguen mayúsculas de minúsculas. Si no está establecida la codificación del contenido, IoT Hub escribirá los mensajes en formato codificado de base 64.

El formato de codificación solo se puede establecer cuando se configura el punto de conexión de Blob Storage. No se puede editar desde un punto de conexión existente. Para cambiar los formatos de codificación de un punto de conexión existente, primero debe eliminar el punto de conexión y, luego, volver a crearlo con el formato que quiera. Una estrategia útil podría ser crear un nuevo punto de conexión personalizado con el formato de codificación deseado y agregar una ruta paralela a ese punto de conexión. De esta manera, puede comprobar los datos antes de eliminar el punto de conexión existente.

Puede seleccionar el formato de codificación mediante la API REST Crear o actualizar de IoT Hub, específicamente RoutingStorageContainerProperties, Azure Portal, la CLI de Azure o Azure PowerShell. En la siguiente imagen se muestra cómo seleccionar el formato de codificación en Azure Portal.

Codificación de puntos de conexión de Blob Storage.

IoT Hub agrupa los mensajes por lotes y escribe los datos en un almacenamiento cuando el lote llega a cierto tamaño o después de transcurrir cierta cantidad de tiempo. IoT Hub asume como valor predeterminado la convención de nomenclatura de archivos siguiente:

{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}

Puede usar cualquier convención de nomenclatura de archivos, aunque debe usar todos los tokens de la lista. IoT Hub escribirá en un blob vacío si no hay datos que escribir.

Se recomienda enumerar los blobs o los archivos e iterar sobre ellos para garantizar que se leen todos sin pasar por alto ninguna partición. El intervalo de partición podría cambiar durante una conmutación por error iniciada por Microsoft o una conmutación por error manual de IoT Hub. Puede usar la API List Blobs para la lista de blobs o la API List ADLS Gen2 para la lista de archivos. Vea el siguiente ejemplo como guía.

public void ListBlobsInContainer(string containerName, string iothub)
{
    var storageAccount = CloudStorageAccount.Parse(this.blobConnectionString);
    var cloudBlobContainer = storageAccount.CreateCloudBlobClient().GetContainerReference(containerName);
    if (cloudBlobContainer.Exists())
    {
        var results = cloudBlobContainer.ListBlobs(prefix: $"{iothub}/");
        foreach (IListBlobItem item in results)
        {
            Console.WriteLine(item.Uri);
        }
    }
}

Para crear una cuenta de almacenamiento compatible con Azure Data Lake Gen2, cree una cuenta de almacenamiento V2 y seleccione Enable hierarchical namespace (Habilitar espacio de nombres jerárquico) en la sección Data Lake Storage Gen2 de la pestaña Avanzado, como se muestra en la imagen siguiente:

Seleccione el almacenamiento de Azure Date Lake Gen2.

Colas y temas de Service Bus como punto de conexión de enrutamiento

Las colas y los temas de Service Bus usados como puntos de conexión de IoT Hub no deben tener habilitadas las opciones Sesiones o Detección de duplicados. Si cualquiera de estas opciones está habilitada, el punto de conexión aparece como Inaccesible en Azure Portal.

Event Hubs como punto de conexión de enrutamiento

Aparte del punto de conexión compatible con Event Hubs integrado, también puede enrutar los datos a puntos de conexión personalizados de tipo Event Hubs.

Azure Cosmos DB como punto de conexión de enrutamiento (versión preliminar)

Puede enviar datos directamente a Azure Cosmos DB desde IoT Hub. Cosmos DB es un servicio de base de datos multimodelo con hiperescala totalmente administrado. Proporciona una latencia baja y una alta disponibilidad, lo que hace que sea una opción excelente para escenarios como soluciones conectadas y fabricación que requieren un amplio análisis de datos de bajada.

IoT Hub admite la escritura en Cosmos DB en JSON (si se especifica en el tipo de contenido del mensaje) o como binario codificado en Base64. Puede configurar un punto de conexión de Cosmos DB para el enrutamiento de mensajes mediante los pasos siguientes en Azure Portal:

  1. Vaya al centro de IoT aprovisionado.

  2. En el menú de recursos, seleccione Enrutamiento de mensajes en Configuración del centro.

  3. Seleccione la pestaña Puntos de conexión personalizados en el panel de trabajo, seleccione Agregar y elija Cosmos DB (versión preliminar) en la lista desplegable.

    En la imagen siguiente se muestran las opciones de adición de puntos de conexión en el panel de trabajo de Azure Portal:

    Captura de pantalla en la que se muestra cómo agregar un punto de conexión de Cosmos DB.

  4. Escriba un nombre para el punto de conexión de Cosmos DB en Nombre del punto de conexión.

  5. En Cuenta de Cosmos DB, elija una cuenta de Cosmos DB existente de una lista de cuentas de Cosmos DB disponibles para su selección y, después, seleccione una base de datos y una colección existentes en Base de datos y Colección, respectivamente.

  6. En Generate a synthetic partition key for messages (Generar una clave de partición sintética para los mensajes), seleccione Habilitar si es necesario.

    Para admitir de forma eficaz escenarios de gran escala, puede habilitar claves de partición sintéticas para el punto de conexión de Cosmos DB. Como Cosmos DB es un almacén de datos de hiperescala, todos los datos o documentos que se escriban en él deben contener un campo que represente una partición lógica. Cada partición lógica tiene un tamaño máximo de 20 GB. Puede especificar el nombre de la propiedad de clave de partición en Partition key name (Nombre de clave de partición). El nombre de la propiedad de clave de partición se define en el nivel de contenedor y no se puede cambiar una vez que se ha establecido.

    Puede configurar el valor de la clave de partición sintética si especifica una plantilla en Partition key template (Plantilla de clave de partición) basada en el volumen de datos estimado. Por ejemplo, en escenarios de fabricación, es posible que la partición lógica se acerque a su límite máximo de 20 GB en un mes. En ese caso, puede definir una clave de partición sintética como una combinación del identificador del dispositivo y el mes. El valor de la clave de partición generada se agrega automáticamente a la propiedad de clave de partición para cada nuevo registro de Cosmos DB, lo que garantiza que se crean particiones lógicas todos los meses para cada dispositivo.

  7. En Tipo de autenticación, elija un tipo de autenticación para el punto de conexión de Cosmos DB. Puede elegir cualquiera de los tipos de autenticación admitidos para acceder a la base de datos, en función de la configuración del sistema.

    Precaución

    Si usa la identidad administrada asignada por el sistema para autenticarse en Cosmos DB, debe usar la CLI de Azure o Azure PowerShell para asignar la definición de rol integrado de Colaborador de datos de Cosmos DB a la identidad. Actualmente no se admite la asignación de roles para Cosmos DB en Azure Portal. Para obtener más información sobre los distintos roles, consulte Configuración del acceso basado en roles en Azure Cosmos DB. Para aprender a asignar roles a través de la CLI, consulte Administración de recursos de rol de SQL de Azure Cosmos DB.

  8. Seleccione Crear para completar la creación del punto de conexión personalizado.

Para obtener más información sobre el uso de Azure Portal para crear rutas de mensajes y puntos de conexión para el centro de IoT, consulte Enrutamiento de mensajes con IoT Hub: Azure Portal.

Lectura de datos que se han enrutado

Para configurar una ruta, siga este tutorial.

Use los siguientes tutoriales para obtener información sobre cómo leer mensajes de un punto de conexión.

Ruta de reserva

La ruta de reserva envía todos los mensajes que no cumplen las condiciones de consulta en cualquiera de las rutas existentes al punto de conexión integrado (mensajes o eventos) que sea compatible con Event Hubs. Si el enrutamiento de mensajes está habilitado, puede habilitar la funcionalidad de ruta de reserva. Una vez que se ha creado una ruta, los datos dejan de fluir al punto de conexión integrado, a menos que se cree una ruta a ese punto de conexión. Si no hay ninguna ruta al punto de conexión integrado y está habilitada una ruta de reserva, solo se enviarán al punto de conexión integrado los mensajes que no coincidan con ninguna de las condiciones de la consulta sobre rutas. Además, si se eliminan todas las rutas existentes, se debe habilitar la capacidad de ruta de reserva para recibir todos los datos en el punto de conexión integrado.

Puede habilitar o deshabilitar la ruta de reserva en Azure Portal en la hoja Enrutamiento de mensajes. También puede usar Azure Resource Manager para que FallbackRouteProperties use un punto de conexión personalizado para la ruta de reserva.

Eventos que no son de telemetría

Además de la telemetría del dispositivo, el enrutamiento de mensajes también habilita el envío de eventos que no son de telemetría, incluidos los siguientes:

  • Eventos de cambio de dispositivo gemelo
  • Eventos de ciclo de vida del dispositivo
  • Eventos de ciclo de vida del trabajo del dispositivo
  • Eventos de cambio de gemelo digital
  • Eventos del estado de conexión del dispositivo
  • Mensajes del agente de MQTT

Por ejemplo, si se crea una ruta con el origen de datos establecido en Eventos de cambio de dispositivo gemelo, IoT Hub envía mensajes al punto de conexión que contienen el cambio en el dispositivo gemelo. De forma similar, si se crea una ruta con el origen de datos establecido en Eventos de ciclo de vida del dispositivo, IoT Hub envía un mensaje que indica si el dispositivo o el módulo se han eliminado o creado. Para más información sobre los eventos del ciclo de vida de los dispositivos, consulte Notificaciones del ciclo de vida de dispositivos y módulos. Al usar Azure IoT Plug and Play, un desarrollador puede crear rutas con el origen de datos establecido en Eventos de cambio de gemelo digital e IoT Hub enviará mensajes siempre que se establezca o cambie una propiedad de gemelo digital, se sustituya un gemelo digital o se produzca un evento de cambio para el dispositivo gemelo subyacente. Finalmente, si se crea una ruta con el origen de datos establecido en Device Connection State Events (Eventos de estado de conexión del dispositivo), IoT Hub enviará un mensaje que indica si el dispositivo se ha conectado o desconectado.

IoT Hub también se integra con Azure Event Grid para publicar los eventos de dispositivo con el fin de admitir integraciones en tiempo real y la automatización de flujos de trabajo basados en estos eventos. Consulte las diferencias principales entre el enrutamiento de mensajes y Event Grid para obtener información sobre la mejor opción para su escenario.

Limitaciones de los eventos de estado de conexión del dispositivo

Los eventos de estado de conexión de dispositivos están disponibles para los dispositivos que se conectan mediante el protocolo MQTT o AMQP, o mediante cualquiera de estos protocolos a través de WebSockets. Las solicitudes realizadas solo con HTTPS no desencadenarán notificaciones de estado de conexión de dispositivos. Para que IoT Hub comience a enviar eventos de estado de conexión de dispositivos, después de abrir una conexión, un dispositivo debe llamar a la operación de recepción de mensajes de nube a dispositivo o a la operación de telemetría de envío de dispositivo a nube. Fuera de los SDK de Azure IoT, en MQTT estas operaciones equivalen a las operaciones SUBSCRIBE o PUBLISH en los temas de mensajería correspondientes. Con AMQP, estas operaciones equivalen a adjuntar o transferir un mensaje en las rutas de acceso al vínculo adecuadas.

IoT Hub no informa de la conexión y desconexión de cada dispositivo individual, sino que publica el estado de conexión actual tomado en una instantánea periódica de 60 segundos. Si se recibe el mismo evento de estado de conexión con diferentes números de secuencia o eventos de estado de conexión distintos, quiere decir que se ha producido un cambio en el estado de conexión del dispositivo durante el período de 60 segundos.

Prueba de las rutas

Al crear una ruta nueva o al modificar una ruta existente, debe probar la consulta de ruta con un mensaje de ejemplo. Puede probar rutas individuales o probar todas las rutas a la vez y no se enruta ningún mensaje a los puntos de conexión durante la prueba. Puede usar Azure Portal, Azure Resource Manager, Azure PowerShell y la CLI de Azure para realizar las pruebas. Los resultados ayudan a identificar si el mensaje de ejemplo coincide o no con la consulta, o si no se pudo ejecutar la prueba porque la sintaxis del mensaje de ejemplo o de la consulta son incorrectas. Para obtener más información, consulte Prueba de una ruta y Prueba de todas las rutas.

Latencia

Al enrutar mensajes de telemetría del dispositivo a la nube mediante puntos de conexión integrados, aumenta ligeramente la latencia de un extremo a otro tras las creación de la primera ruta.

En la mayoría de los casos, el aumento medio de la latencia es inferior a 500 milisegundos. Sin embargo, la latencia que experimenta puede variar y puede ser mayor en función del nivel del centro de IoT y de la arquitectura de la solución. Puede supervisar la latencia con las métricas de IoT Hub Enrutamiento: latencia de mensaje para mensajes y eventos o d2c.endpoints.latency.builtIn.events. La creación o eliminación de una ruta tras la primera no afecta a la latencia de un extremo a otro.

Supervisión y solución de problemas

IoT Hub proporciona varias métricas relacionadas con el enrutamiento y los puntos de conexión para ofrecerle una visión general del mantenimiento del centro y los mensajes enviados. Para obtener una lista de todas las métricas de IoT Hub desglosadas por categoría funcional, consulte la sección Métricas de Supervisión de la referencia a datos de Azure IoT Hub. Puede realizar el seguimiento de los errores que se producen durante la evaluación de una consulta de enrutamiento y del estado del punto de conexión que percibe IoT Hub con la categoría rutas de los registros de recursos de IoT Hub. Para obtener más información sobre el uso de métricas y registros de recursos con IoT Hub, consulte Supervisión de Azure IoT Hub.

Puede usar la API REST Get Endpoint Health para obtener el estado de mantenimiento de los puntos de conexión.

Use la guía de solución de problemas del enrutamiento para obtener una información más detallada y soporte técnico para solucionar problemas de enrutamiento.

Pasos siguientes