Freigeben über


Übersicht über die Integration von Azure Service Bus zu Event Grid

Service Bus kann Ereignisse an das Ereignisraster ausgeben, wenn nachrichten in einer Warteschlange oder in einem Abonnement vorhanden sind, wenn keine Empfänger vorhanden sind. Sie können Event Grid-Abonnements für Ihre Service Bus-Namespaces erstellen, diese Ereignisse überwachen und dann auf die Ereignisse reagieren, indem Sie einen Empfänger starten. Mit dieser Funktion können Sie Service Bus in reaktiven Programmiermodellen verwenden. Das wichtigste Szenario dieses Features ist, dass Service Bus-Warteschlangen oder -Abonnements mit einer geringen Anzahl von Nachrichten keinen Empfänger haben müssen, der kontinuierlich nach Nachrichten abruft.

Um das Feature zu aktivieren, benötigen Sie die folgenden Elemente:

  • Ein Service Bus Premium-Namespace mit mindestens einer ServiceBus-Warteschlange oder einem Service Bus-Thema mit mindestens einem Abonnement.
  • Mitwirkenderzugriff auf den ServiceBus-Namespace. Navigieren Sie im Azure-Portal zu Ihrem Service Bus-Namespace, und wählen Sie dann die Zugriffssteuerung (IAM) und dann die Registerkarte "Rollenzuweisungen " aus. Stellen Sie sicher, dass Sie über den Mitwirkendenzugriff auf den Namespace verfügen.
  • Darüber hinaus benötigen Sie ein Event Grid-Abonnement für den Service Bus-Namespace. Dieses Abonnement empfängt eine Benachrichtigung aus dem Ereignisraster, dass Nachrichten zur Abholung vorhanden sind. Typische Abonnenten können das Logic Apps-Feature von Azure App Service, Azure Functions oder ein Webhook sein, der eine Web-App kontaktiert. Der Abonnent verarbeitet dann die Nachrichten.

19

Verfügbare Ereignistypen

Service Bus gibt die folgenden Ereignistypen aus:

Ereignistyp BESCHREIBUNG
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Wird ausgelöst, wenn eine neue aktive Nachricht in einer Warteschlange oder einem Abonnement eingeht und keine Empfänger lauschen.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Wird ausgelöst, wenn eine neue aktive Nachricht in einer Warteschleife eingeht und keine aktiven Listener vorhanden sind.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Wird alle 30 Sekunden ausgelöst, wenn aktive Nachrichten in einer Warteschlange oder einem Abonnement vorhanden sind, auch wenn aktive Listener in dieser bestimmten Warteschlange oder in diesem Abonnement vorhanden sind. Sie wird auch ausgelöst, wenn die Anzahl der aktiven Nachrichten von 0 zu einem positiven Wert für die Warteschlange oder das Abonnement wechselt.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Wird alle 30 Sekunden ausgelöst, wenn nachrichten in der Entität "Inaktiv" einer Warteschlange oder eines Abonnements enthalten sind, auch wenn aktive Listener in der Entität "Dead-Letter" dieser bestimmten Warteschlange oder dieses Abonnements vorhanden sind. Sie wird auch ausgelöst, wenn die Anzahl der Nachrichten mit einem Totbuchstaben von 0 zu einem positiven Wert für die Entität "Inaktiv" der Warteschlange oder des Abonnements wechselt.

Beispielereignis

Aktive Nachrichten ohne Listener verfügbar

Dieses Ereignis wird generiert, wenn Sie aktive Nachrichten in einer Warteschlange oder einem Abonnement haben und keine Empfänger lauschen.

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

Inaktive Nachrichten, die ohne Listener verfügbar sind

Das Schema für ein Ereignis in der Warteschleifenwarteschlange ist ähnlich. Sie erhalten mindestens ein Ereignis pro Warteschlange mit Nachrichten und keine aktiven Empfänger.

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

Aktive Nachrichten, die regelmäßige Benachrichtigungen verfügbar sind

Dieses Ereignis wird in regelmäßigen Abständen generiert, wenn Sie aktive Nachrichten in der spezifischen Warteschlange oder im Abonnement haben, auch wenn es aktive Listener für diese bestimmte Warteschlange oder dieses Abonnement gibt.

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

Nachrichten mit in toten Buchstaben verfügbaren regelmäßigen Benachrichtigungen

Dieses Ereignis wird in regelmäßigen Abständen generiert, wenn Sie deadletter-Nachrichten in der spezifischen Warteschlange oder im Abonnement haben, auch wenn aktive Listener in der Deadletter-Entität dieser bestimmten Warteschlange oder dieses Abonnements vorhanden sind.

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

Ereigniseigenschaften

Ein Ereignis enthält die folgenden Daten auf oberster Ebene:

Eigentum Typ BESCHREIBUNG
topic Schnur Vollständiger Ressourcenpfad zur Ereignisquelle. Dieses Feld ist nicht beschreibbar. Dieser Wert wird von Event Grid bereitgestellt.
subject Schnur Vom Herausgeber definierter Pfad zum Ereignisbetreff
eventType Schnur Einer der registrierten Ereignistypen für die Ereignisquelle.
eventTime Schnur Die Zeit, in der das Ereignis generiert wird, basierend auf der UTC-Zeit des Anbieters.
id Schnur Eindeutiger Bezeichner für das Ereignis.
data Objekt Service Bus-Ereignisdaten.
dataVersion Schnur Die Schemaversion des Datenobjekts. Der Herausgeber definiert die Schemaversion.
metadataVersion Schnur Die Schemaversion der Ereignismetadaten. Das Ereignisraster definiert das Schema der Eigenschaften der obersten Ebene. Dieser Wert wird von Event Grid bereitgestellt.

Das Datenobjekt weist die folgenden Eigenschaften auf:

Eigentum Typ BESCHREIBUNG
namespaceName Schnur Der Service Bus-Namespace, in dem die Ressource vorhanden ist.
requestUri Schnur Der URI für die spezifische Warteschlange oder das Abonnement, das das Ereignis aussendet.
entityType Schnur Der Typ der Service Bus-Entität, die Ereignisse ausgibt (Warteschlange oder Abonnement).
queueName Schnur Die Warteschlange mit aktiven Nachrichten, wenn Sie eine Warteschlange abonnieren. Wert null, wenn Themen/Abonnements verwendet werden.
topicName Schnur Das Thema des Service Bus-Abonnements mit aktiven Nachrichten gehört zu. Wert null, wenn eine Warteschlange verwendet wird.
subscriptionName Schnur Das Service Bus-Abonnement mit aktiven Nachrichten. Wert null, wenn eine Warteschlange verwendet wird.

Event Grid-Abonnements für Service Bus-Namespaces

Sie können Event Grid-Abonnements für Service Bus-Namespaces auf drei verschiedene Arten erstellen:

  • Azure-Portal. In den folgenden Lernprogrammen erfahren Sie, wie Sie mithilfe des Azure-Portals Event Grid-Abonnements für Service Bus-Ereignisse mit Azure Logic Apps und Azure Functions als Handlern erstellen.
  • Azure CLI. Das folgende CLI-Beispiel zeigt, wie Sie ein Azure Functions-Abonnement für ein Systemthema erstellen, das von einem Service Bus-Namespace erstellt wurde.

    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. Im Folgenden finden Sie ein Beispiel:
    $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>"
    

Wie viele Ereignisse werden ausgegeben und wie oft?

Wenn Sie über mehrere Warteschlangen und Themen oder Abonnements im Namespace verfügen, erhalten Sie mindestens ein Ereignis pro Warteschlange und ein Ereignis pro Abonnement. Die Ereignisse werden sofort ausgegeben, wenn keine Nachrichten in der ServiceBus-Entität vorhanden sind und eine neue Nachricht eingeht. Oder die Ereignisse werden alle zwei Minuten ausgegeben, es sei denn, service bus erkennt einen aktiven Empfänger. Das Durchsuchen von Nachrichten unterbricht die Ereignisse nicht.

Standardmäßig gibt Service Bus Ereignisse für alle Entitäten im Namespace aus. Wenn Sie Nur Ereignisse für bestimmte Entitäten abrufen möchten, lesen Sie den nächsten Abschnitt.

Verwenden von Filtern, um den Ort einzuschränken, von dem Ereignisse abgerufen werden

Wenn Sie Ereignisse nur aus einer Warteschlange oder einem Abonnement innerhalb Ihres Namespace abrufen möchten, können Sie die "Begins with" oder "Ends" mit Filtern verwenden, die vom Ereignisraster bereitgestellt werden. In einigen Schnittstellen werden die Filter als Prä- und Suffixfilter bezeichnet. Wenn Sie Ereignisse für mehrere, aber nicht alle, Warteschlangen und Abonnements abrufen möchten, können Sie mehrere Event Grid-Abonnements erstellen und jeweils einen Filter bereitstellen.

Nächste Schritte

Sehen Sie sich die folgenden Tutorials an: