Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本教程介绍如何使用Azure Functions和Azure Logic Apps响应通过Azure Event Grid接收的Azure Service Bus事件。
在本教程中,你将了解如何执行以下操作:
- 创建 Service Bus 命名空间
- 准备用于发送消息的示例应用程序
- 将消息发送到服务总线主题
- 使用逻辑应用接收消息
- 在 Azure 上设置测试函数
- 通过事件网格连接函数和命名空间
- 使用 Azure Functions 接收消息
Prerequisites
如果没有 Azure 试用订阅,请在开始之前创建一个 试用订阅。
Note
事件网格与Azure Service Bus集成不支持所有接收模式和方案。 具体而言,Peek-Lock行为和消息解决模式可能与本机Service Bus触发器不同。 如果工作流需要 Peek-Lock 语义或高级结算控制,请使用 Service Bus 原生触发器或接收器,而不是 Event Grid。 使用此示例之前,请确保主题和订阅配置为事件网格兼容性。
创建 Service Bus 命名空间
按照本教程中的说明:快速入门:使用 Azure 门户创建 Service Bus 主题和主题订阅,完成以下任务:
- 创建 premium Service Bus 命名空间。
- 获取连接字符串。
- 创建Service Bus主题。
- 创建主题的订阅。 本教程只需要一个订阅,因此无需创建订阅 S2 和 S3。
将消息发送到服务总线主题
在本部分中,将使用示例应用程序将消息发送到在上一部分创建的Service Bus主题。
克隆 GitHub azure-service-bus 存储库或下载 zip 文件并从中提取文件。
在Visual Studio中,转到 \samples\DotNet\Azure。Messaging.ServiceBus\ServiceBusEventGridIntegrationV2 文件夹,然后打开 SBEventGridIntegration.sln 文件。
在 Solution Explorer 窗口中,展开 MessageSender 项目,然后选择 Program.cs。
将“
<SERVICE BUS NAMESPACE - CONNECTION STRING>”替换为Service Bus命名空间的连接字符串,并将“<TOPIC NAME>”替换为主题名称。const string ServiceBusConnectionString = "<SERVICE BUS NAMESPACE - CONNECTION STRING>"; const string TopicName = "<TOPIC NAME>";生成并运行程序以将五条测试消息(
const int numberOfMessages = 5;)发送到Service Bus主题。
其他先决条件
安装 Visual Studio 2022并包括 Azure 开发工作负荷。 此工作负荷包括Azure函数工具,需要在Visual Studio中创建、生成和部署Azure Functions项目。
部署函数应用
Note
若要详细了解如何创建和部署Azure Functions应用,请参阅
从 SBEventGridIntegration.sln 解决方案的 FunctionApp1 项目中打开 ReceiveMessagesOnEvent.cs 文件。
将
<SERVICE BUS NAMESPACE - CONNECTION STRING>替换为您的服务总线命名空间的连接字符串。 它应与你在同一解决方案中的 MessageSender 项目的 Program.cs 文件中使用的字符串相同。右键单击“FunctionApp1”,然后选择“发布”。
在“发布”页面上选择“启动”。 这些步骤可能与你看到的不同,但发布过程应该是类似的。
在 Publish 向导中,在 Target 页上,选择 Azure 作为 Target。
在 Specific target 页上,选择 Azure Function App (Windows)。
在 Functions 实例页上,选择“新建”。
在 Function App (Windows) 页上,执行以下步骤:
- 输入函数应用的名称。
- 选择Azure 订阅。
- 选择现有资源组或创建新资源组。 对于本教程,请选择具有Service Bus命名空间的资源组。
- 为应用服务选择计划类型。
- 选择一个位置。 选择与Service Bus命名空间相同的位置。
- 选择现有的 Azure Storage 或选择 New创建新的存储帐户供 Functions 应用使用。
- 对于 Application insights,请选择与Azure函数关联的现有 Application Insights 实例或创建一个。
- 选择“创建”以创建函数应用。
返回到“发布”向导的“函数实例”页面,选择“完成”。
在 Visual Studio 中的 Publish 页上,选择 Publish将 Functions 应用发布到 Azure。
在“输出”窗口中,查看来自生成和发布的消息,并确认它们都已成功。
如果发布失败并出现身份验证问题,请确保为 Azure Functions 应用启用 SCM 基本身份验证发布选项。
现在,在 Publish 页上的 Hosting 部分中,选择 ...(省略号),然后在 Azure 门户中选择 Open。
显示 Visual Studio 中的“发布”页面的截图。 在 Azure 门户中的 Function App 页上,从列表中选择EventGridTriggerFunction。 建议将事件网格触发器与Azure Functions一起使用,因为它与使用 HTTP 触发器有一些好处。 有关详细信息,请参阅 Azure 函数作为事件网格事件的事件处理程序。
在“EventGridTriggerFunction”的“函数”页面上,切换到“调用”选项卡。
在 Web 浏览器的标签页中将此页面保持在打开状态。 稍后你将刷新此页面来查看对该函数的调用。
通过事件网格连接函数和Service Bus命名空间
在本部分中,你将使用 Azure 门户将函数和Service Bus命名空间绑定在一起。
若要创建Azure Event Grid订阅,请执行以下步骤:
在Azure门户中,转到Service Bus命名空间,然后在左窗格中选择Events。 此时会打开命名空间窗口,两个事件网格订阅显示在右窗格中。
在工具栏上选择“+ 事件订阅”。
在“创建事件订阅”页中执行以下步骤:
输入订阅的名称。
输入系统主题的名称 。 系统主题是为Azure资源(例如Azure Storage帐户和Azure Service Bus)创建的主题。 要详细了解系统主题,请参阅系统主题概述。
选择 Azure 函数作为 Endpoint Type,然后选择配置终结点。
在 Select Azure Function(选择 Azure 函数) 页上,选择订阅、资源组、函数应用、槽和函数,然后选择 确认选择(Confirm selection)。
在“创建事件订阅”页上,切换到“筛选器”选项卡,并执行以下任务:
切换到“事件”页面的“事件订阅”选项卡,并确认列表中显示了事件订阅。
显示 Service Bus 命名空间的事件订阅的截图。
监视函数应用
之前发送到Service Bus主题的消息被转发到订阅(S1)。 事件网格将订阅中的消息转发到 Azure 函数。 在本教程的此步骤中,你将确认已调用该函数并查看记录的信息性消息。
在Azure函数应用的页面上,切换到调用选项卡(如果它尚未处于活动状态)。 应能看到发布到 Service Bus 主题的每个消息的条目。 如果没有看到这些条目,请在等待几分钟后刷新页面。
从列表中选择调用以查看详细信息。
你也可以使用“日志”选项卡查看消息发送时的日志信息。 可能会有一些延迟,因此请在几分钟后再查看记录的消息。
Troubleshoot
如果在等待和刷新一段时间后没有看到任何函数调用,请执行以下步骤:
确认消息已到达 Service Bus 主题。 请参阅Service Bus主题页上的传入消息计数器。 在本例中,我运行了两次 MessageSender 应用程序,因此我会看到 10 条消息(每次运行 5 条消息)。
确认Service Bus订阅中没有活跃消息。 如果在此页上未看到任何事件,请确认 Service Bus Subscription 页是否未显示任何 活动消息计数。 如果此计数器的数字大于零,则由于某些原因,订阅中的消息没有转发到处理程序函数(事件订阅处理程序)。 请验证是否已正确设置事件订阅。
显示 Service Bus 订阅中活动消息计数的截图。 还可以在Service Bus命名空间的 Events 页上看到传递事件。
还可在“事件订阅”页面上看到事件已发送。 可在“事件”页上选择事件订阅来访问此页面。
相关内容
- 详细了解 Azure Event Grid。
- 详细了解 Azure Functions。
- 详细了解 Azure Service Bus。