服务总线队列和主题作为 Azure 事件网格事件的事件处理程序

事件处理程序是发送事件的位置。 处理程序将执行一些进一步的操作来处理事件。 几个 Azure 服务已自动配置为处理事件,Azure 服务总线是其中之一。

可以使用服务队列或主题作为事件网格事件的处理程序。

服务总线队列

注意

不支持将启用了会话的队列作为 Azure 事件网格事件的事件处理程序

可以将事件网格中的事件直接路由到服务总线队列,用于企业应用程序中的缓冲或命令和控制方案。

在 Azure 门户中,请在创建事件订阅时选择“服务总线队列”作为终结点类型,然后单击“选择终结点”以选择服务总线队列。

使用 CLI 添加服务总线队列处理程序

在 Azure CLI 中,以下示例可订阅事件网格主题并将其连接到服务总线队列:

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

服务总线主题

可以将事件网格中的事件直接路由到服务总线主题,以使用服务总线主题处理 Azure 系统事件,或者将其用于命令和控制消息方案。

在 Azure 门户中,请在创建事件订阅时选择“服务总线主题”作为终结点类型,然后单击“选择终结点”以选择服务总线主题。

使用 CLI 添加服务总线主题处理程序

对于 Azure CLI,以下示例订阅事件网格主题并将其连接到服务总线主题:

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

消息标头

以下是在消息标头中接收的属性:

属性名称 说明
aeg-subscription-name 事件订阅的名称。
aeg-delivery-count 针对该事件进行尝试的次数。
aeg-event-type

事件的类型。

可以为下列值之一:

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

事件的元数据版本。

对于“事件网格事件架构”,此属性表示元数据版本;对于“云事件架构”,此属性表示规范版本。

aeg-data-version

事件的数据版本。

对于“事件网格事件架构”,此属性表示数据版本;对于“云事件架构”,此属性不适用。

aeg-output-event-id 事件网格事件的 ID。

将事件作为中转消息发送到服务总线队列或主题时,中转消息的 messageid 是内部系统 ID。

消息的内部系统 ID 会在事件重新传递期间保留,因此你可以在服务总线实体上启用“重复项检测”,避免重复传递。 建议在服务总线实体上启用重复项检测持续时间,并将其设为事件的生存时间 (TTL) 或最大重试持续时间(以较长者为准)。

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

传递属性

通过事件订阅,可以设置已传递事件中包含的 HTTP 头。 使用此功能,可设置目标所需的自定义标头。 可以对传递到 Azure 服务总线队列和主题的事件设置自定义标头。

Azure 服务总线支持在发送单个消息时使用以下消息属性。

标头名称 标头类型
MessageId 动态
PartitionKey 静态或动态
SessionId 静态或动态
CorrelationId 静态或动态
Label 静态或动态
ReplyTo 静态或动态
ReplyToSessionId 静态或动态
To 静态或动态
ViaPartitionKey 静态或动态

注意

  • MessageId 的默认值是事件网格事件的内部 ID。 你可以替代它。 例如,data.field
  • 只能设置 SessionIdMessageId

有关详细信息,请参阅自定义传送属性

后续步骤

如需支持的事件处理程序的列表,请参阅事件处理程序一文。