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

Service Bus peut émettre des événements vers Event Grid lorsque la file d’attente ou l’abonnement contient des messages et qu’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 et y réagir en démarrant un récepteur. Avec cette fonctionnalité, vous pouvez utiliser Service Bus dans des modèles de programmation réactive. Cette fonctionnalité peut être utilisée lorsque les abonnements ou les files d’attente Service Bus ayant un faible volume de messages n’ont pas besoin d’un récepteur qui interroge les messages en continu.

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

  • Un 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.
  • Un accès Contributeur à l’espace de noms Service Bus. Accédez à votre espace de noms Service Bus dans le portail Azure, sélectionnez Contrôle d’accès (IAM) , puis sélectionnez l’onglet Attributions de rôles. Vérifiez que vous disposez d’un 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 de la part d’Event Grid lui indiquant qu’il y a des messages à relever. Les abonnés classiques peuvent être la fonctionnalité Logic Apps d’Azure App Service, Azure Functions ou 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 Description
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Déclenché lorsqu’un nouveau message actif arrive dans une file d’attente ou un abonnement, sans récepteur à l’écoute.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Déclenché lorsque des messages actifs arrivent dans une file d’attente de lettres mortes et qu’aucun récepteur n’est actif.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Événement levé toutes les 30 secondes lorsque des messages actifs sont présents dans une file d’attente ou un abonnement, même s’il existe des écouteurs actifs sur cette file d’attente ou cet abonnement spécifique. Il est également levé lorsque le nombre de messages actifs passe de 0 à une valeur positive pour la file d’attente ou l’abonnement.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Événement levé toutes les 30 secondes lorsque des messages sont présents dans une 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 cet abonnement spécifique. Il est également levé 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 écouteurs

Cet événement est généré si des messages actifs sont présents dans une file d’attente ou un abonnement et qu’aucun récepteur n’est à l’é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 écouteurs

Le schéma pour 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 qui contient 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"
}]

Notifications périodiques disponibles concernant les messages actifs

Cet événement est généré régulièrement si des messages actifs sont présents dans une file d’attente ou un abonnement, même s’il existe des écouteurs actifs sur cette file d’attente ou cet 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"
}]

Notifications périodiques disponibles concernant les messages de lettres mortes

Cet événement est généré régulièrement si des messages de lettres mortes sont présents dans une file d’attente ou un abonnement, même s’il existe des écouteurs actifs sur l’entité de lettres mortes de cette file d’attente ou cet 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 contient les données générales suivantes :

Propriété Type Description
topic string Chemin d’accès complet à la source de l’événement. Ce champ n’est pas modifiable. Event Grid fournit cette valeur.
subject string Chemin de l’objet de l’événement, défini par le serveur de publication.
eventType string Un des types d’événements inscrits pour cette source d’événement.
eventTime string L’heure à quelle l’événement est généré selon l’heure UTC du fournisseur.
id string Identificateur unique de l’événement.
data object Données d’événement de stockage Blob.
dataVersion string Version du schéma de l’objet de données. Le serveur de publication définit la version du schéma.
metadataVersion string Version du schéma des métadonnées d’é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é Type Description
namespaceName string Espace de noms Service Bus dans lequel figure la ressource.
requestUri string URI vers la file d’attente spécifique ou l’abonnement qui génère l’événement.
entityType string Type d’entité Service Bus générant des événements (file d’attente ou abonnement).
queueName string File d’attente contenant des messages actives en cas d’abonnement à une file d’attente. Valeur null si des rubriques / abonnements sont utilisés.
topicName string Rubrique à laquelle appartient l’abonnement Service Bus contenant les messages actifs. Valeur null si une file d’attente est utilisée.
subscriptionName string Abonnement Service Bus contenant les messages actifs. Valeur null si une file d’attente est utilisée.

Abonnements Event Grid pour les espaces de noms Service Bus

Il existe trois méthodes pour créer des abonnements Event Grid pour les espaces de noms Service Bus :

  • Portail Azure. Consultez les tutoriels suivants afin de savoir comment utiliser Portail Azure pour créer des abonnements Event Grid pour des événements Service Bus avec Azure Logic Apps et Azure Functions comme 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. Voici 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>"
    

À quelle fréquence et en quelle quantité sont émis les événements ?

Si plusieurs files d’attente et rubriques ou abonnements sont présents 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 un nouveau message arrive. Ou les événements sont émis toutes les deux minutes, sauf si Service Bus détecte un récepteur actif. Le parcours des messages n’interrompt pas les événements.

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

Utilisation de filtres pour limiter l’emplacement des événements que vous obtenez

Si vous souhaitez obtenir les événements d’une seule file d’attente ou d’un seul abonnement dans votre espace de noms, vous pouvez utiliser les filtres Commence par ou Se termine par fournis par Event Grid. Dans certaines interfaces, les filtres sont appelés des filtres de Préfixe et de Suffixe. Si vous souhaitez obtenir les événements de plusieurs files d’attente et abonnements, mais pas tous, vous pouvez créer plusieurs abonnements Event Grid et fournir un filtre pour chacun.

Étapes suivantes

Consultez les didacticiels suivants :