Overzicht integratie Azure Service Bus met Azure Event Grid
Service Bus kan nu gebeurtenissen naar Event Grid verzenden als er zich berichten in een wachtrij of abonnement bevinden zonder dat er ontvangers 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 Service Bus naamruimte in de Azure Portal selecteer vervolgens Toegangsbeheer (IAM) en selecteer het tabblad Roltoewijzingen. Controleer of u inzenderstoegang hebt tot de naamruimte.
- 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.

Beschikbare gebeurtenistypen
Service Bus de volgende gebeurtenistypen:
| Gebeurtenistype | Beschrijving |
|---|---|
| Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners | Deze wordt aan de orde gesteld wanneer er actieve berichten in een wachtrij of abonnement staan en er geen ontvangers luisteren. |
| Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners | Deze wordt aangetroffen wanneer er actieve berichten in een wachtrij voor in de wachtrij voor in de wachtrij voor in wachtrij staan en er geen actieve listeners zijn. |
| Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications | Wordt elke 30 seconden verhoogd als er actieve berichten in een wachtrij of abonnement staan, zelfs als er actieve listeners in die specifieke wachtrij of een specifiek abonnement zijn. Het wordt ook verhoogd wanneer het aantal actieve berichten van 0 naar een positieve waarde voor de wachtrij of het abonnement wordt overstappen. |
| Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications | Elke 30 seconden verhoogd als er berichten in de dead-letter-entiteit van een wachtrij of abonnement staan, zelfs als er actieve listeners zijn in de dead-letter-entiteit van die specifieke wachtrij of abonnement. De waarde wordt ook weergegeven wanneer het aantal berichten in de wachtrij of het abonnement in de wachtrij of het abonnement van 0 naar een positieve waarde wordt overgewaarded. |
Voorbeeldgebeurtenis
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"
}]
Deadletter-berichten beschikbaar zonder listeners
Het schema voor een wachtrijgebeurtenis voor een wachtrij met een wachtrij voor een in wachtrij voor een wachtrij met een wachtrij voor een impasse is vergelijkbaar. U krijgt ten minste één gebeurtenis per wachtrij met 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 Beschikbare periodieke meldingen
Deze gebeurtenis wordt periodiek gegenereerd als er actieve berichten in de specifieke wachtrij of het specifieke abonnement staan, zelfs als er actieve listeners zijn voor die specifieke wachtrij of dat specifieke 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"
}]
Deadletter-berichten beschikbare periodieke meldingen
Deze gebeurtenis wordt periodiek gegenereerd als u berichten met een impasse in de specifieke wachtrij of het specifieke abonnement hebt, zelfs als er actieve listeners zijn in de deadletter-entiteit van 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.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 | De tijd dat de gebeurtenis wordt gegenereerd op basis van de UTC-tijd van de provider. |
id |
tekenreeks | De 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 zich bevindt. |
requestUri |
tekenreeks | De URI voor de specifieke wachtrij of het abonnement die de gebeurtenis heeft gemaakt. |
entityType |
tekenreeks | Het type entiteit Service Bus gebeurtenissen (wachtrij of abonnement) uit te geven. |
queueName |
tekenreeks | De wachtrij met actieve berichten als u zich abonneert op een wachtrij. Waarde null als u onderwerpen/abonnementen gebruikt. |
topicName |
tekenreeks | Het onderwerp waar Service Bus abonnement met actieve berichten bij hoort. 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 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 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 als u door berichten bladert.
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: