Teilen über


Service Bus-Warteschlangen und -Themen als Ereignishandler für Azure Event Grid-Ereignisse

Ein Ereignishandler empfängt Ereignisse von einer Ereignisquelle über Event Grid und verarbeitet diese Ereignisse. Sie können Instanzen einiger Azure-Dienste verwenden, um Ereignisse zu behandeln. Azure Service Bus ist eines davon. In diesem Artikel erfahren Sie, wie Sie eine Service Bus-Warteschlange oder ein Service Bus-Thema als Handler für Ereignisse aus Event Grid verwenden.

Service Bus-Warteschlangen

Sie können Ereignisse in Event Grid zur Verwendung in Puffer- oder Befehls- und Kontrollszenarien in Unternehmensanwendungen direkt an Service Bus-Warteschlangen weiterleiten.

Verwenden des Azure-Portals

Wählen Sie im Azure-Portal bei der Erstellung eines Ereignisabonnements Service Bus-Warteschlange als Endpunkttyp aus, und klicken Sie dann auf Endpunkt auswählen, um eine Service Bus-Warteschlange auszuwählen.

Screenshot: Konfiguration eines Service Bus-Warteschlangenhandlers.

Hinweis

Sitzungsfähige Warteschlangen werden nicht als Ereignishandler für Azure Event Grid-Ereignisse unterstützt.

Mithilfe der Azure-Befehlszeilenschnittstelle

Verwenden Sie den Befehl az eventgrid event-subscription create, wobei --endpoint-type auf servicebusqueue und --endpoint auf /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/queues/<QUEUE NAME> festgelegt ist. Hier sehen Sie ein Beispiel:

az eventgrid event-subscription create \
    --name <my-event-subscription> \
    --source-resource-id /subscriptions/{SubID}/resourceGroups/{RG}/providers/Microsoft.EventGrid/topics/topic1 \
    --endpoint-type servicebusqueue \
    --endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/queues/queue1

Sie können auch den Befehl az eventgrid topic event-subscription für benutzerdefinierte Themen, den Befehl az eventgrid system-topic event-subscription für Systemthemen und den Befehl az eventgrid partner topic event-subscription create für Partnerthemen verwenden.

Mithilfe von Azure PowerShell

Verwenden Sie den Befehl New-AzEventGridSubscription, wobei -EndpointType auf servicebusqueue und -Endpoint auf /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/queues/<QUEUE NAME> festgelegt ist. Hier sehen Sie ein Beispiel:

New-AzEventGridSubscription -ResourceGroup MyResourceGroup `
            -TopicName Topic1 `
            -EndpointType servicebusqueue `
            -Endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/queues/queue1 `
            -EventSubscriptionName EventSubscription1

Sie können auch den Befehl New-AzEventGridSystemTopicEventSubscription für Systemthemen und den Befehl New-AzEventGridPartnerTopicEventSubscription für Partnerthemen verwenden.

Service Bus-Themen

Sie können Ereignisse in Event Grid zur Verwendung in Befehls- und Kontrollszenarien direkt an Service Bus-Themen weiterleiten.

Verwenden des Azure-Portals

Wählen Sie im Azure-Portal bei der Erstellung eines Ereignisabonnements Service Bus-Thema als Endpunkttyp aus, und klicken Sie dann auf Endpunkt auswählen, um ein Service Bus-Thema auszuwählen.

Screenshot: Konfiguration eines Service Bus-Themahandlers.

Mithilfe der Azure-Befehlszeilenschnittstelle

Verwenden Sie den Befehl az eventgrid event-subscription create, wobei --endpoint-type auf servicebustopic und --endpoint auf /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/topics/<TOPIC NAME> festgelegt ist. Hier sehen Sie ein Beispiel:

az eventgrid event-subscription create \
    --name <my-event-subscription> \
    --source-resource-id /subscriptions/{SubID}/resourceGroups/{RG}/providers/Microsoft.EventGrid/topics/topic1 \
    --endpoint-type servicebustopic \
    --endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/topics/topic1

Sie können auch den Befehl az eventgrid topic event-subscription für benutzerdefinierte Themen, den Befehl az eventgrid system-topic event-subscription für Systemthemen und den Befehl az eventgrid partner topic event-subscription create für Partnerthemen verwenden.

Mithilfe von Azure PowerShell

Verwenden Sie den Befehl New-AzEventGridSubscription, wobei -EndpointType auf servicebustopic und -Endpoint auf /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/topics/<TOPIC NAME> festgelegt ist. Hier sehen Sie ein Beispiel:

New-AzEventGridSubscription -ResourceGroup MyResourceGroup `
            -TopicName Topic1 `
            -EndpointType servicebustopic `
            -Endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/topics/topic1 `
            -EventSubscriptionName EventSubscription1

Sie können auch den Befehl New-AzEventGridSystemTopicEventSubscription für Systemthemen und den Befehl New-AzEventGridPartnerTopicEventSubscription für Partnerthemen verwenden.

Nachrichtenheader

Dies sind die Eigenschaften, die Sie in den Nachrichtenheadern empfangen:

Eigenschaftenname BESCHREIBUNG
aeg-subscription-name Name des Ereignisabonnements.
aeg-delivery-count Anzahl von Versuchen, die für das Ereignis durchgeführt wurden
aeg-event-type

Der Typ des Ereignisses

Es kann sich um einen der folgenden Werte handeln:

  • SubscriptionValidation
  • Benachrichtigung
  • SubscriptionDeletion
aeg-metadata-version

Die Metadatenversion des Ereignisses

Bei einem Event Grid-Ereignisschema stellt diese Eigenschaft die Metadatenversion und bei einem Cloudereignisschema die Spezifikationsversion dar.

aeg-data-version

Die Datenversion des Ereignisses

Bei einem Event Grid-Ereignisschema stellt diese Eigenschaft die Datenversion dar. Bei einem Cloudereignisschema kommt sie nicht zur Anwendung

aeg-output-event-id ID des Event Grid-Ereignisses

Wenn Sie ein Ereignis an eine Service Bus-Warteschlange oder ein Service Bus-Thema als im Broker gespeicherte Nachricht senden, ist die messageid dieser im Broker gespeicherten Nachricht eine interne System-ID.

Die interne System-ID für die Nachricht wird bei der erneuten Übermittlung des Ereignisses beibehalten. Sie können also doppelte Übermittlungen vermeiden, indem Sie die Duplikaterkennung für die Service Bus-Entität aktivieren. Es wird empfohlen, die Dauer der Duplikaterkennung für die Service Bus-Entität entweder auf die Gültigkeitsdauer (Time-To-Live, TTL) des Ereignisses oder auf den maximalen Wiederholungszeitraum festzulegen, je nachdem, welcher Zeitraum länger ist.

Übermittlungseigenschaften

Mit Ereignisabonnements können Sie HTTP-Header einrichten, die in übermittelte Ereignisse eingeschlossen werden. Diese Funktion ermöglicht es Ihnen, die benutzerdefinierten Header festzulegen, die ein Ziel erfordert. Sie können benutzerdefinierte Header für die Ereignisse festlegen, die an Azure Service Bus-Warteschlangen und -Themen übermittelt werden.

Von Azure Service Bus wird die Verwendung der folgenden Nachrichteneigenschaften beim Senden einzelner Nachrichten unterstützt.

Headername Headertyp
MessageId Dynamisch
PartitionKey Statisch oder dynamisch
SessionId Statisch oder dynamisch
CorrelationId Statisch oder dynamisch
Label Statisch oder dynamisch
ReplyTo Statisch oder dynamisch
ReplyToSessionId Statisch oder dynamisch
To Statisch oder dynamisch
ViaPartitionKey Statisch oder dynamisch

Hinweis

  • Der Standardwert von MessageId ist die interne ID des Event Grid Ereignisses. Sie kann außer Kraft gesetzt werden. Beispielsweise data.field.
  • Sie können nur SessionId oder MessageId festlegen.

Weitere Informationen finden Sie unter Benutzerdefinierte Übermittlungseigenschaften.

REST-Beispiele (für PUT)

Service Bus-Warteschlange

{
    "properties": 
    {
        "destination": 
        {
			"endpointType": "ServiceBusQueue",
            "properties": 
            {
				"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/queues/<SERVICE BUS QUEUE NAME>"
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

Service Bus-Warteschlange: Bereitstellung mit verwalteter Identität

{
	"properties": {
        "deliveryWithResourceIdentity": 
        {
            "identity": 
            {
				"type": "SystemAssigned"
			},
            "destination": 
            {
				"endpointType": "ServiceBusQueue",
                "properties": 
                {
					"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/queues/<SERVICE BUS QUEUE NAME>"
				}
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

Service Bus-Topic

{
    "properties": 
    {
        "destination": 
        {
			"endpointType": "ServiceBusTopic",
            "properties": 
            {
				"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/topics/<SERVICE BUS TOPIC NAME>"
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

Service Bus-Thema: Bereitstellung mit verwalteter Identität

{
    "properties": 
    {
        "deliveryWithResourceIdentity": 
        {
            "identity": 
            {
				"type": "SystemAssigned"
			},
            "destination": 
            {
				"endpointType": "ServiceBusTopic",
                "properties": 
                {
					"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/topics/<SERVICE BUS TOPIC NAME>"
				}
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

Hinweis

Wenn ein Failover für einen Service Bus-Namespace auftritt, für den georedundante Notfallwiederherstellung aktiviert ist, gibt der sekundäre Namespace keine Ereignisse an Event Grid aus. Sie müssen das Event Grid-Abonnement für den sekundären Namespace manuell hinzufügen.

Nächste Schritte

Eine Liste der unterstützten Ereignishandler finden Sie im Artikel zu Ereignishandlern.