你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将函数用作事件网格事件的事件处理程序

事件处理程序是发送事件的位置。 处理程序将通过一个操作来处理事件。 几个 Azure 服务已自动配置为处理事件,Azure Functions 就是其中之一。 例如,Azure 事件网格可以利用 Azure Functions 作为防损层来转换或验证事件,然后再将其转发到下游系统。

若要使用 Azure 中的函数作为事件的处理程序,请遵循以下一种方法:

  • 使用事件网格触发器。 将“Azure 函数”指定为“终结点类型” 。 然后,指定将处理事件的函数应用和函数。
  • 使用 HTTP 触发器。 将“Web Hook”指定为“终结点类型” 。 然后,指定将处理事件的函数的 URL。

建议使用第一种方法(事件网格触发器),因为它与第二种方法相比具有以下优势:

  • 事件网格会自动验证事件网格触发器。 使用通用 HTTP 触发器时,必须自行实现验证响应
  • 事件网格根据函数处理事件的感知速率自动调整事件传递到事件网格事件触发的函数的速率。 这种速率匹配功能可避免由于函数无法处理事件而导致的传递错误,因为函数的事件处理速率可能会随时间而改变。 若要在高吞吐量下提高效率,请在事件订阅上启用批处理。 有关详细信息,请参阅启用批处理

注意

  • 在利用事件网格触发器使用 Azure 函数添加事件订阅时,事件网格使用事件网格服务主体的凭据为目标函数提取访问密钥。 在事件网格的 Azure 订阅中注册事件网格资源提供程序时,会向事件网格授予权限。
  • 如果使用 Microsoft Entra ID 应用程序保护 Azure 函数,则必须采用通用的 Webhook 方法并使用 HTTP 触发器。 添加订阅时,使用 Azure 函数终结点作为 Webhook URL。

教程

标题 说明
快速入门:使用函数处理事件 将自定义事件发送到函数进行处理。
教程:将大数据流式传输到数据仓库 当事件中心创建捕获文件时,事件网格会将一个事件发送到函数应用。 应用会检索捕获文件并将数据迁移到数据仓库。
教程:Azure 服务总线到 Azure 事件网格集成示例 事件网格会将消息从服务总线主题发送到函数应用和逻辑应用。

REST 示例(对于 PUT)

{
	"properties": 
	{
		"destination": 
		{
			"endpointType": "AzureFunction",
			"properties": 
			{
				"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.Web/sites/<FUNCTION APP NAME>/functions/<FUNCTION NAME>",
				"maxEventsPerBatch": 10,
				"preferredBatchSizeInKilobytes": 64
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

启用批处理

若要提高吞吐量,请对订阅启用批处理。 如果使用的是 Azure 门户,则可以在创建订阅时或创建订阅后设置每个批的最大事件数和首选批大小(以 KB 为单位)。

可以使用 Azure 门户、PowerShell、CLI 或资源管理器模板配置批处理设置。

Azure 门户

在 UI 中创建订阅时,在“创建事件订阅”页上切换到“高级功能”选项卡,设置“每批最大事件数”和“首选批大小(KB)”的值。

在创建订阅时启用批处理

可以在“事件网格主题”页的“功能”选项卡上更新现有订阅的这些值。

创建后启用批处理

Azure Resource Manager 模板

可以在 Azure 资源管理器模板中设置 maxEventsPerBatch 和 preferredBatchSizeInKilobytes。 有关详细信息,请参阅 Microsoft.EventGrid eventSubscriptions 模板参考

Azure CLI

可以使用 az eventgrid event-subscription create 命令以使用以下参数配置与批相关的设置: --max-events-per-batch--preferred-batch-size-in-kilobytes

Azure PowerShell

可以使用 New-AzEventGridSubscriptionUpdate-AzEventGridSubscription cmdlet,通过以下参数配置与批处理相关的设置:-MaxEventsPerBatch-PreferredBatchSizeInKiloBytes

注意

当你使用事件网格触发器时,事件网格服务会提取目标 Azure 函数的客户端密码,并使用该密码将事件传递给 Azure 函数。 如果使用 Microsoft Entra ID 应用程序保护 Azure 函数,则必须采用通用的 Webhook 方法并使用 HTTP 触发器。

后续步骤

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