Share via


作為 Azure 事件方格事件之事件處理常式的服務匯流排佇列和主題

事件處理常式會透過事件方格從事件來源接收事件,並處理這些事件。 您可以使用幾項 Azure 服務的執行個體來處理事件,Azure 服務匯流排是其中之一。 本文說明如何使用服務匯流排佇列或主題作為事件方格中事件的處理常式。

服務匯流排佇列

您可以將事件方格中的事件直接路由至服務匯流排佇列,以用於企業應用程式中的緩衝處理或命令和控制項案例。

使用 Azure 入口網站

在 Azure 入口網站中建立事件訂用帳戶時,選取 [服務匯流排佇列] 作為端點類型,然後按一下 [選取端點] 以選擇服務匯流排佇列。

Screenshot showing the configuration of a Service Bus queue handler.

注意

不支援已啟用工作階段的佇列作為 Azure 事件方格事件的事件處理常式

使用 Azure CLI

使用 az eventgrid event-subscription create 命令,將 --endpoint-type 設定為 servicebusqueue,將 --endpoint 設定為 /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/queues/<QUEUE NAME>。 以下是範例:

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

您也可以針對自訂主題使用 az eventgrid topic event-subscription 命令、針對系統主題使用 az eventgrid system-topic event-subscription 命令,以及針對合作夥伴主題使用 az eventgrid partner topic event-subscription create 命令。

使用 Azure PowerShell

使用 New-AzEventGridSubscription 命令,將 -EndpointType 設定為 servicebusqueue,將 -Endpoint 設定為 /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/queues/<QUEUE NAME>。 以下是範例:

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

您也可以針對系統主題使用 New-AzEventGridSystemTopicEventSubscription 命令,以及針對合作夥伴主題使用 New-AzEventGridPartnerTopicEventSubscription 命令。

服務匯流排主題

針對命令和控制訊息案例,您可以將事件方格中的事件直接路由至服務匯流排主題。

使用 Azure 入口網站

在 Azure 入口網站中建立事件訂用帳時,選取 [服務匯流排主題] 作為端點類型,然後按一下 [選取和端點] 來選擇服務匯流排主題。

Screenshot showing the configuration of a Service Bus topic handler.

使用 Azure CLI

使用 az eventgrid event-subscription create 命令,將 --endpoint-type 設定為 servicebustopic,將 --endpoint 設定為 /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/topics/<TOPIC NAME>。 以下是範例:

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

您也可以針對自訂主題使用 az eventgrid topic event-subscription 命令、針對系統主題使用 az eventgrid system-topic event-subscription 命令,以及針對合作夥伴主題使用 az eventgrid partner topic event-subscription create 命令。

使用 Azure PowerShell

使用 New-AzEventGridSubscription 命令,將 -EndpointType 設定為 servicebustopic,將 -Endpoint 設定為 /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/topics/<TOPIC NAME>。 以下是範例:

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

您也可以針對系統主題使用 New-AzEventGridSystemTopicEventSubscription 命令,以及針對合作夥伴主題使用 New-AzEventGridPartnerTopicEventSubscription 命令。

訊息標頭

以下是您在訊息標頭中收到的屬性:

屬性名稱 描述
aeg-subscription-name 事件訂閱的名稱。
aeg-delivery-count 對事件進行的嘗試次數。
aeg-event-type

事件的類型。

它可能是下列其中一個值:

  • SubscriptionValidation
  • 通知
  • SubscriptionDeletion
aeg-metadata-version

事件的中繼資料版本。

針對事件方格事件結構描述,此屬性代表中繼資料版本;而針對雲端事件結構描述,其代表規格版本

aeg-data-version

事件的資料版本。

針對事件方格事件結構描述,此屬性代表資料版本;而針對雲端事件結構描述,則不會套用。

aeg-output-event-id 事件方格事件的識別碼。

將事件傳送至服務匯流排的佇列或主題作為代理訊息時,代理訊息的 messageid 會是內部系統識別碼。

訊息的內部系統識別碼會跨事件重新傳遞維護,讓您可以開啟服務匯流排實體上的重複偵測,避免重複傳遞。 建議您在服務匯流排實體上啟用重複偵測的持續時間,使其成為事件的存留時間 (TTL) 或最大重試持續時間 (以較長者為準)。

傳遞屬性

事件訂閱可讓您設定傳遞事件中包含的 HTTP 標頭。 這項功能可讓您設定目的地所需的自訂標頭。 您可以在傳遞至 Azure 服務匯流排佇列和主題的事件上設定自訂標頭。

Azure 服務匯流排支援在傳送單一訊息時使用下列訊息屬性。

標頭名稱 標頭類型
MessageId 動態
PartitionKey 靜態或動態
SessionId 靜態或動態
CorrelationId 靜態或動態
Label 靜態或動態
ReplyTo 靜態或動態
ReplyToSessionId 靜態或動態
To 靜態或動態
ViaPartitionKey 靜態或動態

注意

  • MessageId 的預設值是「事件方格」事件的內部識別碼。 您可加以覆寫。 例如: data.field
  • 您只能設定 SessionIdMessageId

如需詳細資訊,請參閱自訂傳遞屬性

REST 範例 (用於 PUT)

服務匯流排佇列

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

服務匯流排佇列 - 使用受控識別進行傳遞

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

服務匯流排主題

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

服務匯流排主題 - 使用受控識別進行傳遞

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

注意

當啟用 Geo-DR 的服務匯流排命名空間發生容錯轉移時,次要命名空間不會將事件發出至事件方格。 您必須手動新增次要命名空間的事件方格訂用帳戶。

下一步

如需支援的事件處理常式清單,請參閱事件處理常式一文。