Overzicht integratie Azure Service Bus met Azure Event Grid

Service Bus kan gebeurtenissen verzenden naar Event Grid wanneer er berichten in een wachtrij of een abonnement staan wanneer er geen ontvangers aanwezig zijn. U kunt Event Grid-abonnementen maken voor uw Service Bus-naamruimten, naar deze gebeurtenissen luisteren en erop reageren door een ontvanger te starten. Met deze functie kunt u Service Bus gebruiken in reactieve programmeermodellen. Het belangrijkste scenario van deze functie is dat Service Bus-wachtrijen of -abonnementen met een laag volume aan berichten geen ontvanger nodig hebben die continu berichten opvraagt.

Als u deze functie wilt inschakelen, hebt u het volgende nodig:

  • Een Service Bus Premium-naamruimte met ten minste één Service Bus-wachtrij of een Service Bus-onderwerp met ten minste één abonnement.
  • Inzender-toegang tot de Service Bus-naamruimte. Navigeer naar uw Service Bus-naamruimte in de Azure Portal, selecteer vervolgens Toegangsbeheer (IAM) en selecteer het tabblad Roltoewijzingen. Controleer of u de inzendertoegang tot de naamruimte hebt.
  • Bovendien moet u een abonnement op Event Grid voor de Service Bus-naamruimte hebben. Het abonnement ontvangt de melding van Event Grid dat er berichten klaarstaan. Typische abonnees zijn mogelijk de functie Logic Apps van Azure App Service, Azure Functions of een webhook die contact opneemt met een web-app. De abonnee verwerkt vervolgens de berichten.

19

Beschikbare gebeurtenistypen

Service Bus verzendt de volgende gebeurtenistypen:

Gebeurtenistype Beschrijving
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Wordt gegenereerd wanneer een nieuw actief bericht binnenkomt in een wachtrij of abonnement en er geen ontvangers luisteren.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Wordt gegenereerd wanneer nieuwe actieve berichten in een wachtrij met onbestelbare berichten binnenkomen en er geen actieve listeners zijn.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Elke 30 seconden verhoogd als er actieve berichten in een wachtrij of abonnement staan, zelfs als er actieve listeners zijn voor die specifieke wachtrij of abonnement. Het aantal actieve berichten wordt ook verhoogd wanneer het aantal actieve berichten wordt overgezet van 0 naar een positieve waarde voor de wachtrij of het abonnement.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Elke 30 seconden gegenereerd als er berichten in de entiteit met onbestelbare berichten van een wachtrij of abonnement staan, zelfs als er actieve listeners zijn op de entiteit met onbestelbare berichten van dat specifieke wachtrij of abonnement. Dit wordt ook geactiveerd wanneer het aantal onbestelbare berichten van 0 naar een positieve waarde voor de entiteit met onbestelbare berichten van de wachtrij of het abonnement overgaat.

Voorbeeld van gebeurtenis

Actieve berichten beschikbaar zonder listeners

Deze gebeurtenis wordt gegenereerd als er actieve berichten in een wachtrij of abonnement zijn, en er geen ontvangers luisteren.

[{
  "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"
}]

Berichten met onbestelbare berichten beschikbaar zonder listeners

Het schema voor een wachtrij met onbestelbare berichten is vergelijkbaar. U krijgt ten minste één gebeurtenis per wachtrij met onbestelbare berichten en geen actieve ontvangers.

[{
  "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"
}]

Actieve berichten beschikbaar periodieke meldingen

Deze gebeurtenis wordt periodiek gegenereerd als u actieve berichten in de specifieke wachtrij of het specifieke abonnement hebt, zelfs als er actieve listeners zijn voor die specifieke wachtrij of abonnement.

[{
  "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"
}]

Berichten met onbestelbare berichten beschikbaar periodieke meldingen

Deze gebeurtenis wordt regelmatig gegenereerd als u berichten in de specifieke wachtrij of het specifieke abonnement hebt, zelfs als er actieve listeners zijn op de entiteit deadletter van dat specifieke wachtrij of abonnement.

[{
  "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"
}]

Gebeurteniseigenschappen

Een gebeurtenis heeft de volgende gegevens op het hoogste niveau:

Eigenschap Type Description
topic tekenreeks Volledig resourcepad naar de gebeurtenisbron. Dit veld kan niet worden geschreven. Event Grid biedt deze waarde.
subject tekenreeks Het door de uitgever gedefinieerde pad naar het gebeurtenisonderwerp.
eventType tekenreeks Een van de geregistreerde gebeurtenistypen voor deze gebeurtenisbron.
eventTime tekenreeks Het tijdstip waarop de gebeurtenis wordt gegenereerd op basis van de UTC-tijd van de provider.
id tekenreeks Unieke id voor de gebeurtenis.
data object Blob Storage-gebeurtenisgegevens.
dataVersion tekenreeks De schemaversie van het gegevensobject. De uitgever definieert de schemaversie.
metadataVersion tekenreeks De schemaversie van de metagegevens van de gebeurtenis. Event Grid definieert het schema voor de eigenschappen op het hoogste niveau. Event Grid biedt deze waarde.

Het gegevensobject heeft de volgende eigenschappen:

Eigenschap Type Description
namespaceName tekenreeks De Service Bus-naamruimte waarin de resource bestaat.
requestUri tekenreeks De URI naar de specifieke wachtrij of het specifieke abonnement dat de gebeurtenis verzendt.
entityType tekenreeks Het type Service Bus-entiteit dat gebeurtenissen verzendt (wachtrij of abonnement).
queueName tekenreeks De wachtrij met actieve berichten als u zich abonneert op een wachtrij. Waarde null als onderwerpen/abonnementen worden gebruikt.
topicName tekenreeks Het onderwerp waartoe het Service Bus-abonnement met actieve berichten behoort. Waarde null als u een wachtrij gebruikt.
subscriptionName tekenreeks Het Service Bus-abonnement met actieve berichten. Waarde null als u een wachtrij gebruikt.

Event Grid-abonnementen voor Service Bus-naamruimten

U kunt op drie verschillende manieren Event Grid-abonnementen voor Service Bus-naamruimten maken:

  • Azure Portal. Zie de volgende zelfstudies voor meer informatie over het gebruik van Azure Portal om Event Grid-abonnementen te maken voor Service Bus-gebeurtenissen met Azure Logic Apps en Azure Functions als handlers.
  • Azure CLI. In het volgende CLI-voorbeeld ziet u hoe u een Azure Functions-abonnement maakt voor een systeemonderwerp dat is gemaakt door een Service Bus-naamruimte.

    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. Hier volgt een voorbeeld:
    $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>"
    

Hoeveel gebeurtenissen worden er verzonden en hoe vaak?

Als u meerdere wachtrijen en onderwerpen of abonnementen in de naamruimte hebt, krijgt u minimaal één gebeurtenis per wachtrij en één per abonnement. De gebeurtenissen worden onmiddellijk uitgezonden als de Service Bus-entiteit geen berichten bevat en er een nieuw bericht arriveert. Of de gebeurtenissen worden elke twee minuten uitgezonden, tenzij Service Bus een actieve ontvanger detecteert. De gebeurtenissen worden niet onderbroken door het bladeren door berichten.

Standaard verzendt Service Bus gebeurtenissen voor alle entiteiten in de naamruimte. Als u alleen voor specifieke entiteiten gebeurtenissen wilt ophalen, raadpleegt u de volgende sectie.

Filters gebruiken om te beperken waarvandaan u gebeurtenissen ophaalt

Als u gebeurtenissen bijvoorbeeld alleen van één wachtrij of één abonnement binnen uw naamruimte wilt ontvangen, kunt u de filters Begint met of Eindigt op van Event Grid gebruiken. In sommige interfaces worden deze filters voorvoegselfilter en achtervoegselfilter genoemd. Als u gebeurtenissen voor meerdere maar niet alle wachtrijen en abonnementen wilt ontvangen, kunt u meerdere verschillende Event Grid-abonnementen maken en voor elk ervan een filter opgeven.

Volgende stappen

Zie de volgende zelfstudies: