作為 Azure 事件方格事件之事件處理常式的服務匯流排佇列和主題
事件處理常式會透過事件方格從事件來源接收事件,並處理這些事件。 您可以使用幾項 Azure 服務的執行個體來處理事件,Azure 服務匯流排是其中之一。 本文說明如何使用服務匯流排佇列或主題作為事件方格中事件的處理常式。
服務匯流排佇列
您可以將事件方格中的事件直接路由至服務匯流排佇列,以用於企業應用程式中的緩衝處理或命令和控制項案例。
使用 Azure 入口網站
在 Azure 入口網站中建立事件訂用帳戶時,選取 [服務匯流排佇列] 作為端點類型,然後按一下 [選取端點] 以選擇服務匯流排佇列。
注意
不支援已啟用工作階段的佇列作為 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 入口網站中建立事件訂用帳時,選取 [服務匯流排主題] 作為端點類型,然後按一下 [選取和端點] 來選擇服務匯流排主題。
使用 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 | 事件的類型。 它可能是下列其中一個值:
|
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
。- 您只能設定
SessionId
或MessageId
。
如需詳細資訊,請參閱自訂傳遞屬性。
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"
}
}
注意
當啟用異地災害復原的服務匯流排命名空間發生容錯轉移時,次要命名空間不會將事件發出至事件方格。 您必須手動新增次要命名空間的事件方格訂用帳戶。
下一步
如需支援的事件處理常式清單,請參閱事件處理常式一文。