Router les messages MQTT dans Azure Event Grid

Event Grid vous permet de router vos messages MQTT vers des services Azure ou des webhooks pour un traitement ultérieur. En acheminant ces données, vous pouvez construire des solutions de bout en bout qui utilisent vos données IoT pour l’analyse, le stockage et la visualisation.

Cet article explique quand utiliser le routage et vous montre comment configurer le routage vers un sujet d’espace de noms Event Grid ou un sujet personnalisé.

Schéma qui montre les messages MQTT routant des appareils via Azure Event Grid vers des gestionnaires tels que les services Azure, webhooks et applications.

Quand utiliser le routage

Router les messages de vos clients vers un service Azure ou votre point de terminaison personnalisé vous aide à maximiser les avantages de ces données. La liste suivante décrit certains des nombreux cas d’utilisation de cette fonctionnalité :

  • Analyse des données : Extrayez et analysez les messages routés de vos clients pour optimiser votre solution. Par exemple, analysez la télémétrie de vos machines pour prédire quand programmer la maintenance avant que les pannes ne surviennent, afin d’éviter retards et dommages supplémentaires.
  • Applications serverless : déclenchez une fonction serverless basée sur les messages acheminés de vos clients. Par exemple, lorsqu’un détecteur de mouvement détecte un mouvement, envoyez une notification au personnel de sécurité pour qu’ils y répondent.
  • Visualisations de données : Construisez des visualisations des données acheminées de vos clients pour représenter et comprendre les données, et pour mettre en évidence les tendances et les cas anormaux.

Configuration du routage

La configuration de routage vous permet d’envoyer tous vos messages MQTT de vos clients vers un sujet d’espace de noms Event Grid ou un sujet personnalisé Event Grid. Une fois les messages dans la rubrique, vous pouvez configurer un abonnement aux événements pour consommer les messages de la rubrique. Utilisez les étapes suivantes de haut niveau pour réaliser cette configuration :

  • Topic de namespace en tant que destination de routage :
    • Créez un sujet d’espace de noms Event Grid où Event Grid aroute tous les messages MQTT.
    • Créez un abonnement à un événement de type push pour acheminer ces messages vers l’un des services Azure pris en charge ou vers un webhook personnalisé, ou créez un abonnement d’événement de type file d’attente pour extraire les messages directement du sujet de l’espace de noms via votre application.
    • Définissez la configuration de routage qui se réfère au sujet que vous avez créé lors de la première étape.

Diagramme du routage des messages MQTT vers les rubriques d’espace de noms.

Diagramme du routage des messages MQTT vers des rubriques personnalisées.

Note

Désactiver l’accès public au réseau sur l’espace de noms provoque l’échec du routage MQTT.

Différence entre les rubriques d’espace de noms et les rubriques personnalisées comme destination de routage

Le tableau suivant montre la différence entre les rubriques d’espace de noms et les rubriques personnalisées comme destination de routage. Pour une ventilation détaillée des quotas et limites inclus par chaque ressource de la grille d’événements, voir Quotas et limites.

Point de comparaison Topic de namespace Rubrique personnalisée
Débit Haut, jusqu’à 40 Mo/s (entrée) et 80 Mo/s (sortie) Faible, jusqu’à 5 Mo/s (entrée et sortie)
Livraison par extraction Oui Non
Envoi direct à Event Hubs Oui Oui
Livraison push vers les services Azure (Functions, Webhooks, files et topics Service Bus, connexions hybrides Relay et files de stockage) Non Oui
Rétention des messages 7 jours 1 jour
Condition requise pour l’attribution de rôle Pas nécessaire, car le broker MQTT et le topic d’espace de noms appartiennent au même espace de noms Indispensable car l’espace de noms hébergeant la fonctionnalité du courtier MQTT et le sujet personnalisé sont des ressources différentes

Exigences relatives aux rubriques personnalisées Event Grid pour le routage

Le sujet personnalisé Event Grid que vous utilisez pour le routage doit répondre aux exigences suivantes :

  • Il doit utiliser le schéma CloudEvents v1.0.
  • Il doit se trouver dans la même région que l’espace de noms.
  • Vous devez vous attribuer le rôle Event Grid Data Sender à vous-même ou à l’identité managée sélectionnée sur le sujet personnalisé Event Grid avant d’appliquer la configuration de routage. Pour attribuer le rôle :
    1. Dans le portail, allez à la ressource thématique Event Grid que vous avez créée.
    2. Dans le menu Contrôle d’accès (IAM), sélectionnez Ajouter assignation de rôle.
    3. Dans l’onglet Rôle , sélectionnez Expéditeur de données de la grille d’événements, puis sélectionnez Suivant.
    4. Dans l’onglet Membres, sélectionnez Sélectionner membres, puis saisissez votre nom d’utilisateur Microsoft Entra dans la case Sélectionner qui apparaît (par exemple, user@contoso.com).
    5. Sélectionnez votre nom d’utilisateur Microsoft Entra, puis sélectionnez Réviser + assigner.

Configuration du portail Azure

Pour configurer le routage :

  1. Accédez à votre espace de noms dans le Portail Azure.
  2. Dans Acheminement, sélectionnez Activer le routage.
  3. Pour le type de sujet, sélectionnez soit le sujet de l’espace de noms soit le sujet personnalisé.
  4. Pour le Sujet, sélectionnez le Sujet que vous avez créé où tous les messages MQTT sont routés.
  5. Si vous sélectionnez un sujet personnalisé, la section Identité gérée pour la livraison apparaît. Sélectionnez l’une des options suivantes pour l’identité qui authentifie le courtier MQTT pendant qu’il transmet les messages MQTT au sujet personnalisé :
    • Aucune : attribuez-vous le rôle Expéditeur de données Event Grid sur la rubrique personnalisée.
    • Identité assignée au système : Activez l’identité assignée au système sur l’espace de noms comme prérequis, et attribuez le rôle Event Grid Data Sender à l’identité assignée par le système sur le sujet personnalisé.
    • Identité attribuée par l’utilisateur : Activez l’identité assignée par l’utilisateur dans l’espace de noms comme prérequis, et attribuez le rôle Expéditeur de données de la grille d’événements à l’identité sélectionnée sur le sujet personnalisé. Si vous sélectionnez Identité assignée par l’utilisateur, un menu déroulant apparaît pour que vous puissiez sélectionner l’identité.
  6. Sélectionnez Appliquer.

Capture d’écran montrant la configuration du routage via le portail.

Pour obtenir des instructions de configuration sur les enrichissements, accédez à la configuration du portail d’enrichissement.

Configuration d’Azure CLI

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",
                "userAssignedIdentity": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<User-assigned identity>"
            }
        }
    }
}

Dans routingIdentityInfo, type accepte None, SystemAssigned, ou UserAssigned. Ne posez userAssignedIdentity que lorsque type est UserAssigned.

Pour obtenir des instructions de configuration d’enrichissement, accédez à la configuration de l’interface CLI d’enrichissement.

Comportement de routage des messages MQTT

Lors du routage des messages MQTT vers des topics personnalisés, Event Grid assure une livraison durable en essayant de livrer chaque message au moins une fois immédiatement. En cas d’échec, Event Grid tente soit de nouveau la livraison, soit abandonne le message destiné au routage. Event Grid ne garantissant pas l’ordre de remise d’événements, les abonnés pourraient recevoir les événements dans le désordre.

Le tableau suivant décrit le comportement du routage des messages MQTT en fonction de différentes erreurs.

Error Description de l’erreur Comportement
ErreurSujetNonTrouvé Le sujet personnalisé configuré pour recevoir tous les messages routés MQTT a été supprimé. Event Grid enlève le message MQTT destiné au routage.
AuthenticationError Le rôle Expéditeur de données Event Grid pour la rubrique personnalisée configurée comme destination pour les messages routés MQTT a été supprimé. Event Grid enlève le message MQTT destiné au routage.
TropDeRequêtes Le nombre de messages routés MQTT par seconde dépasse la limite de publication pour la rubrique personnalisée. Event Grid retente d’acheminer le message MQTT.
Erreur de Service Erreur de serveur inattendue pour des raisons opérationnelles. Event Grid retente d’acheminer le message MQTT.

Lors des réessais, Event Grid utilise une stratégie de réessai avec délai exponentiel pour le routage des messages MQTT. Dans la mesure du possible, Event Grid tente une nouvelle livraison selon la planification suivante :

  • 10 secondes
  • 30 secondes
  • Une minute
  • 5 minutes
  • 10 minutes
  • 30 minutes
  • 1 heure
  • 3 heures
  • 6 heures
  • Toutes les 12 heures

Si la relivraison d’un message MQTT acheminé mis en file d’attente réussit, Event Grid essaie de supprimer le message de la file d’attente de nouvelle tentative dans la mesure du possible, mais il se peut que vous receviez quand même des doublons.