Compartilhar via

教程:使用 Azure Functions 响应通过 Azure Event Grid 收到的 Azure Service Bus 事件

本教程介绍如何使用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主题。

  1. 克隆 GitHub azure-service-bus 存储库或下载 zip 文件并从中提取文件。

  2. 在Visual Studio中,转到 \samples\DotNet\Azure。Messaging.ServiceBus\ServiceBusEventGridIntegrationV2 文件夹,然后打开 SBEventGridIntegration.sln 文件。

  3. Solution Explorer 窗口中,展开 MessageSender 项目,然后选择 Program.cs

  4. 将“<SERVICE BUS NAMESPACE - CONNECTION STRING>”替换为Service Bus命名空间的连接字符串,并将“<TOPIC NAME>”替换为主题名称。

    const string ServiceBusConnectionString = "<SERVICE BUS NAMESPACE - CONNECTION STRING>";
    const string TopicName = "<TOPIC NAME>";
    
  5. 生成并运行程序以将五条测试消息(const int numberOfMessages = 5;)发送到Service Bus主题。

    屏幕截图显示控制台应用输出,发送 5 条消息。

其他先决条件

安装 Visual Studio 2022并包括 Azure 开发工作负荷。 此工作负荷包括Azure函数工具,需要在Visual Studio中创建、生成和部署Azure Functions项目。

部署函数应用

Note

若要详细了解如何创建和部署Azure Functions应用,请参阅 使用 Visual Studio

  1. SBEventGridIntegration.sln 解决方案的 FunctionApp1 项目中打开 ReceiveMessagesOnEvent.cs 文件。

  2. <SERVICE BUS NAMESPACE - CONNECTION STRING> 替换为您的服务总线命名空间的连接字符串。 它应与你在同一解决方案中的 MessageSender 项目的 Program.cs 文件中使用的字符串相同。

  3. 右键单击“FunctionApp1”,然后选择“发布”

  4. 在“发布”页面上选择“启动”。 这些步骤可能与你看到的不同,但发布过程应该是类似的。

  5. Publish 向导中,在 Target 页上,选择 Azure 作为 Target

  6. Specific target 页上,选择 Azure Function App (Windows)

  7. Functions 实例页上,选择“新建”

    Screenshot 显示“Visual Studio - 发布”对话框的“添加函数”按钮

  8. Function App (Windows) 页上,执行以下步骤:

    1. 输入函数应用的名称
    2. 选择Azure 订阅
    3. 选择现有资源组或创建新资源组。 对于本教程,请选择具有Service Bus命名空间的资源组。
    4. 为应用服务选择计划类型
    5. 选择一个位置。 选择与Service Bus命名空间相同的位置。
    6. 选择现有的 Azure Storage 或选择 New创建新的存储帐户供 Functions 应用使用。
    7. 对于 Application insights,请选择与Azure函数关联的现有 Application Insights 实例或创建一个。
    8. 选择“创建”以创建函数应用。
  9. 返回到“发布”向导的“函数实例”页面,选择“完成”

  10. 在 Visual Studio 中的 Publish 页上,选择 Publish将 Functions 应用发布到 Azure。

  11. 在“输出”窗口中,查看来自生成和发布的消息,并确认它们都已成功。

    如果发布失败并出现身份验证问题,请确保为 Azure Functions 应用启用 SCM 基本身份验证发布选项。

    显示已启用“SCM 基本身份验证发布”选项的屏幕截图。

  12. 现在,在 Publish 页上的 Hosting 部分中,选择 ...(省略号),然后在 Azure 门户中选择 Open

    显示 Visual Studio 中的“发布”页面的截图。

  13. 在 Azure 门户中的 Function App 页上,从列表中选择EventGridTriggerFunction。 建议将事件网格触发器与Azure Functions一起使用,因为它与使用 HTTP 触发器有一些好处。 有关详细信息,请参阅 Azure 函数作为事件网格事件的事件处理程序

    一个屏幕截图,其中显示了包含事件网格触发器函数的“函数”页。

  14. 在“EventGridTriggerFunction”的“函数”页面上,切换到“调用”选项卡。

    显示事件网格触发器函数的“调用”页的屏幕截图。

    在 Web 浏览器的标签页中将此页面保持在打开状态。 稍后你将刷新此页面来查看对该函数的调用。

通过事件网格连接函数和Service Bus命名空间

在本部分中,你将使用 Azure 门户将函数和Service Bus命名空间绑定在一起。

若要创建Azure Event Grid订阅,请执行以下步骤:

  1. 在Azure门户中,转到Service Bus命名空间,然后在左窗格中选择Events。 此时会打开命名空间窗口,两个事件网格订阅显示在右窗格中。

    显示 Service Bus 命名空间事件页的截图。

  2. 在工具栏上选择“+ 事件订阅”

  3. 在“创建事件订阅”页中执行以下步骤:

    1. 输入订阅的名称

    2. 输入系统主题的名称 。 系统主题是为Azure资源(例如Azure Storage帐户和Azure Service Bus)创建的主题。 要详细了解系统主题,请参阅系统主题概述

    3. 选择 Azure 函数作为 Endpoint Type,然后选择配置终结点

      截图,显示“Service Bus 命名空间”的“创建事件订阅”页。

    4. Select Azure Function(选择 Azure 函数) 页上,选择订阅、资源组、函数应用、槽和函数,然后选择 确认选择(Confirm selection)

      截图显示已选择Azure函数的端点。

    5. 在“创建事件订阅”页上,切换到“筛选器”选项卡,并执行以下任务:

      1. 选择“启用主题筛选”

      2. 输入您之前创建的 Service Bus Topic 的订阅名称。 在以下屏幕截图中,订阅名称为 mysub

      3. 选择“创建”按钮。

        显示事件订阅的“筛选器”页的屏幕截图。

  4. 切换到“事件”页面的“事件订阅”选项卡,并确认列表中显示了事件订阅。

    显示 Service Bus 命名空间的事件订阅的截图。

监视函数应用

之前发送到Service Bus主题的消息被转发到订阅(S1)。 事件网格将订阅中的消息转发到 Azure 函数。 在本教程的此步骤中,你将确认已调用该函数并查看记录的信息性消息。

  1. 在Azure函数应用的页面上,切换到调用选项卡(如果它尚未处于活动状态)。 应能看到发布到 Service Bus 主题的每个消息的条目。 如果没有看到这些条目,请在等待几分钟后刷新页面。

    显示调用后函数的“调用”页的屏幕截图。

  2. 从列表中选择调用以查看详细信息。

    显示函数调用详细信息的屏幕截图。

    你也可以使用“日志”选项卡查看消息发送时的日志信息。 可能会有一些延迟,因此请在几分钟后再查看记录的消息。

    Screenshot,显示 Azure 函数的“日志”选项卡。

Troubleshoot

如果在等待和刷新一段时间后没有看到任何函数调用,请执行以下步骤:

  1. 确认消息已到达 Service Bus 主题。 请参阅Service Bus主题页上的传入消息计数器。 在本例中,我运行了两次 MessageSender 应用程序,因此我会看到 10 条消息(每次运行 5 条消息)。

    Screenshot 显示 Service Bus 主题页 - 传入消息.

  2. 确认Service Bus订阅中没有活跃消息。 如果在此页上未看到任何事件,请确认 Service Bus Subscription 页是否未显示任何 活动消息计数。 如果此计数器的数字大于零,则由于某些原因,订阅中的消息没有转发到处理程序函数(事件订阅处理程序)。 请验证是否已正确设置事件订阅。

    显示 Service Bus 订阅中活动消息计数的截图。

  3. 还可以在Service Bus命名空间的 Events 页上看到传递事件

    显示已传递事件计数的屏幕截图。

  4. 还可在“事件订阅”页面上看到事件已发送。 可在“事件”页上选择事件订阅来访问此页面。

    显示事件订阅页面 - 已传递事件的屏幕截图。