Partager via


Vue d’ensemble de l’intégration d’Azure Service Bus vers Event Grid

Service Bus peut émettre des événements vers Event Grid lorsqu’il existe des messages dans une file d’attente ou un abonnement lorsqu’aucun récepteur n’est présent. Vous pouvez créer des abonnements Event Grid à vos espaces de noms Service Bus, écouter ces événements, puis réagir aux événements en démarrant un récepteur. Avec cette fonctionnalité, vous pouvez utiliser Service Bus dans des modèles de programmation réactifs. Le scénario clé de cette fonctionnalité est que les files d’attente ou les abonnements Service Bus avec un faible volume de messages n’ont pas besoin d’avoir un récepteur qui interroge les messages en continu.

Pour activer la fonctionnalité, vous avez besoin des éléments suivants :

  • Espace de noms Service Bus Premium avec au moins une file d’attente Service Bus ou une rubrique Service Bus avec au moins un abonnement.
  • Accès contributeur à l’espace de noms Service Bus. Accédez à votre espace de noms Service Bus dans le portail Azure, puis sélectionnez Contrôle d’accès (IAM), puis sélectionnez l’onglet Attributions de rôles . Vérifiez que vous disposez de l’accès contributeur à l’espace de noms.
  • En outre, vous avez besoin d’un abonnement Event Grid pour l’espace de noms Service Bus. Cet abonnement reçoit une notification d’Event Grid indiquant qu’il existe des messages à récupérer. Les abonnés classiques peuvent être la fonctionnalité Logic Apps d’Azure App Service, d’Azure Functions ou d’un webhook contactant une application web. L’abonné traite ensuite les messages.

19

Types d’événement disponibles

Service Bus émet les types d’événements suivants :

Type d'événement Descriptif
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Déclenché lorsqu’un nouveau message actif arrive dans une file d’attente ou un abonnement et qu’aucun récepteur n’écoute.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Déclenché lorsqu’un nouveau message actif arrive dans une file d’attente de lettres mortes et qu’il n’y a pas d’écouteurs actifs.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Déclenché toutes les 30 secondes s’il existe des messages actifs dans une file d’attente ou un abonnement, même s’il existe des écouteurs actifs sur cette file d’attente ou abonnement spécifique. Il est également déclenché lorsque le nombre de messages actifs passe de 0 à une valeur positive pour la file d’attente ou l’abonnement.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Déclenché toutes les 30 secondes s’il existe des messages dans l’entité de lettres mortes d’une file d’attente ou d’un abonnement, même s’il existe des écouteurs actifs sur l’entité de lettres mortes de cette file d’attente ou abonnement spécifique. Il est également déclenché lorsque le nombre de messages de lettres mortes passe de 0 à une valeur positive pour l’entité de lettres mortes de la file d’attente ou de l’abonnement.

Exemple d’événement

Messages actifs disponibles sans écouteur

Cet événement est généré si vous avez des messages actifs dans une file d’attente ou un abonnement et qu’aucun récepteur n’écoute.

[{
  "topic": "/subscriptions/{subscription-id}/resourcegroups/{your-rg}/providers/Microsoft.ServiceBus/namespaces/{your-service-bus-namespace}",
  "subject": "topics/{your-service-bus-topic}/subscriptions/{your-service-bus-subscription}",
  "eventType": "Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://{your-service-bus-namespace}.servicebus.windows.net/{your-topic}/subscriptions/{your-service-bus-subscription}/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Messages de lettres mortes disponibles sans écouteur

Le schéma d’un événement de file d’attente de lettres mortes est similaire. Vous obtenez au moins un événement par file d’attente de lettres mortes contenant des messages et aucun récepteur actif.

[{
  "topic": "/subscriptions/{subscription-id}/resourcegroups/{your-rg}/providers/Microsoft.ServiceBus/namespaces/{your-service-bus-namespace}",
  "subject": "topics/{your-service-bus-topic}/subscriptions/{your-service-bus-subscription}",
  "eventType": "Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://{your-service-bus-namespace}.servicebus.windows.net/{your-topic}/subscriptions/{your-service-bus-subscription}/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Messages actifs disponibles notifications périodiques

Cet événement est généré régulièrement si vous avez des messages actifs dans la file d’attente ou l’abonnement spécifique, même s’il existe des écouteurs actifs pour cette file d’attente ou abonnement spécifique.

[{
  "topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
  "subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
  "eventType": "Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Messages de lettres mortes disponibles notifications périodiques

Cet événement est généré régulièrement si vous avez des messages deadletter sur la file d’attente ou l’abonnement spécifiques, même s’il existe des écouteurs actifs sur l’entité deadletter de cette file d’attente ou abonnement spécifique.

[{
  "topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
  "subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
  "eventType": "Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Propriétés d’événement

Un événement a les données de niveau supérieur suivantes :

Propriété Catégorie Descriptif
topic ficelle Chemin d’accès complet à la source de l’événement. Ce champ n’est pas modifiable. Event Grid fournit cette valeur.
subject ficelle Chemin de l’objet de l’événement, défini par le serveur de publication.
eventType ficelle L’un des types d’événements inscrits pour cette source d’événement.
eventTime ficelle Heure à laquelle l’événement est généré en fonction de l’heure UTC du fournisseur.
id ficelle Identificateur unique de l’événement.
data objet Données d’événement Service Bus.
dataVersion ficelle Version de schéma de l’objet de données. L’éditeur définit la version du schéma.
metadataVersion ficelle La version du schéma des métadonnées de l'événement. Event Grid définit le schéma des propriétés de niveau supérieur. Event Grid fournit cette valeur.

L’objet de données comporte les propriétés suivantes :

Propriété Catégorie Descriptif
namespaceName ficelle L’espace de noms Service Bus dans lequel se trouve la ressource.
requestUri ficelle URI vers la file d’attente ou l’abonnement spécifique qui émet l’événement.
entityType ficelle Type d’entité Service Bus qui émet des événements (file d’attente ou abonnement).
queueName ficelle File d’attente avec des messages actifs si vous vous abonnez à une file d’attente. Valeur Null si vous utilisez des rubriques/abonnements.
topicName ficelle La rubrique à laquelle appartient l’abonnement Service Bus avec des messages actifs. Valeur Null si vous utilisez une file d’attente.
subscriptionName ficelle Abonnement Service Bus avec des messages actifs. Valeur Null si vous utilisez une file d’attente.

Abonnements Event Grid pour les espaces de noms Service Bus

Vous pouvez créer des abonnements Event Grid pour les espaces de noms Service Bus de trois façons différentes :

  • Portail Azure. Consultez les didacticiels suivants pour découvrir comment utiliser le portail Azure pour créer des abonnements Event Grid pour les événements Service Bus avec Azure Logic Apps et Azure Functions en tant que gestionnaires.
  • Azure CLI. L’exemple CLI suivant montre comment créer un abonnement Azure Functions pour une rubrique système créée par un espace de noms Service Bus.

    namespaceid=$(az resource show --namespace Microsoft.ServiceBus --resource-type namespaces --name "<service bus namespace>" --resource-group "<resource group that contains the service bus namespace>" --query id --output tsv
    
    az eventgrid event-subscription create --resource-id $namespaceid --name "<YOUR EVENT GRID SUBSCRIPTION NAME>" --endpoint "<your_endpoint_url>" --subject-ends-with "<YOUR SERVICE BUS SUBSCRIPTION NAME>"
    
  • PowerShell. Prenons un exemple :
    $namespaceID = (Get-AzServiceBusNamespace -ResourceGroupName "<YOUR RESOURCE GROUP NAME>" -NamespaceName "<YOUR NAMESPACE NAME>").Id
    
    New-AzEVentGridSubscription -EventSubscriptionName "<YOUR EVENT GRID SUBSCRIPTION NAME>" -ResourceId $namespaceID -Endpoint "<YOUR ENDPOINT URL>” -SubjectEndsWith "<YOUR SERVICE BUS SUBSCRIPTION NAME>"
    

Combien d’événements sont émis et à quelle fréquence ?

Si vous avez plusieurs files d’attente et rubriques ou abonnements dans l’espace de noms, vous obtenez au moins un événement par file d’attente et un par abonnement. Les événements sont émis immédiatement s’il n’y a aucun message dans l’entité Service Bus et qu’un nouveau message arrive. Ou les événements sont émis toutes les deux minutes, sauf si Service Bus détecte un récepteur actif. La navigation des messages n’interrompt pas les événements.

Par défaut, Service Bus émet des événements pour toutes les entités de l’espace de noms. Si vous souhaitez obtenir des événements pour des entités spécifiques uniquement, consultez la section suivante.

Utiliser des filtres pour limiter l’emplacement d’obtention d’événements à partir de

Si vous souhaitez obtenir des événements uniquement à partir d’une file d’attente ou d’un abonnement dans votre espace de noms, vous pouvez utiliser les filtres Begins with ou Ends avec des filtres fournis par Event Grid. Dans certaines interfaces, les filtres sont appelés filtresde pré-suffixe. Si vous souhaitez obtenir des événements pour plusieurs, mais pas tous, files d’attente et abonnements, vous pouvez créer plusieurs abonnements Event Grid et fournir un filtre pour chacun d’eux.

Étapes suivantes

Consultez les didacticiels suivants :