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

事件处理程序是发送事件的位置。 处理程序将通过一个操作来处理事件。 几个 Azure 服务已自动配置为处理事件,Azure Functions 就是其中之一。

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

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

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

  • 事件网格会自动验证事件网格触发器。 使用通用 HTTP 触发器时,必须自行实现验证响应

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

    注意

    目前,在以 CloudEvents 架构传递事件时,无法对函数应用使用事件网格触发器。 应转而使用 HTTP 触发器。

教程

标题 说明
快速入门:使用函数处理事件 将自定义事件发送到函数进行处理。
教程:使用事件网格自动调整上传图像的大小 用户通过 Web 应用将映像上传到存储帐户。 创建存储 Blob 后,事件网格会向用于重设已上传映像的大小的函数应用发送一个事件。
教程:将大数据流式传输到数据仓库 当事件中心创建捕获文件时,事件网格会将一个事件发送到函数应用。 应用会检索捕获文件并将数据迁移到数据仓库。
教程: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": 6400
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

启用批处理

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

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

Azure 门户

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

Enable batching at the time of creating a subscription

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

Enable batching after creation

Azure 资源管理器模板

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

Azure CLI

可以使用 az eventgrid event-subscription createaz eventgrid event-subscription update 命令,通过以下参数配置与批处理相关的设置:--max-events-per-batch--preferred-batch-size-in-kilobytes

Azure PowerShell

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

注意

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

后续步骤

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