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

教程:使用自定义主题将 Azure 事件网格中的 MQTT 消息路由到 Azure Functions - Azure 门户

本教程介绍如何通过事件网格自定义主题将 Azure 事件网格命名空间接收的 MQTT 消息路由到 Azure 函数,请执行以下步骤:

如果没有 Azure 订阅,可以注册免费试用版

使用事件网格触发器创建 Azure 函数

按照使用 Visual Studio Code 创建 Azure 函数的说明进行操作,但请使用 Azure 事件网格触发器,而不是使用 HTTP 触发器。 应会看到与如下示例类似的代码:

using System;
using Azure.Messaging;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class MyEventGridTriggerFunc
    {
        private readonly ILogger<MyEventGridTriggerFunc> _logger;

        public MyEventGridTriggerFunc(ILogger<MyEventGridTriggerFunc> logger)
        {
            _logger = logger;
        }

        [Function(nameof(MyEventGridTriggerFunc))]
        public void Run([EventGridTrigger] CloudEvent cloudEvent)
        {
            _logger.LogInformation("Event type: {type}, Event subject: {subject}", cloudEvent.Type, cloudEvent.Subject);
        }
    }
}

在本教程的后面部分,将此 Azure 函数用作主题订阅的事件处理程序。

注意

  • 在同一区域中创建所有资源。
  • 本教程已使用采用 .NET 8.0(独立)运行时堆栈的 Azure 函数进行测试。

创建事件网格主题(自定义主题)

创建事件网格主题。 请参阅使用门户创建自定义主题。 创建事件网格主题时,在“高级”选项卡上,对于事件架构,请选择“云事件架构 v1.0”

显示“创建主题”向导的“高级”页的屏幕截图。

注意

在本教程中,随处使用云事件架构。

使用函数向主题添加订阅

在此步骤中,使用前面创建的 Azure 函数创建事件网格主题的订阅。

  1. 在“事件网格”主题页上,选择左侧导航栏上的“订阅”

    显示主题的“事件订阅”页的屏幕截图。

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

    1. 输入事件订阅的名称。

    2. 对于“事件架构”,请选择“云事件架构 v1.0”。

    3. 对于“终结点类型”,请选择“Azure 函数”

    4. 然后,选择“配置终结点”。

      显示“创建事件订阅”窗格的屏幕截图。

  3. 在“选择 Azure 函数”页上执行以下步骤

    1. 对于“订阅”,请选择你的 Azure 订阅。

    2. 对于资源组,选择具有 Azure 函数的资源组

    3. 对于函数应用,请选择具有函数的 Functions 应用。

    4. 对于槽,请选择“生产”

    5. 对于函数,选择你的 Azure 函数

    6. 然后,选择页面底部的“确认选择”

      显示“选择 Azure 属性”页的屏幕截图。

  4. 在“创建事件订阅”页上,选择“创建”。

  5. 在“事件订阅”页上,应会看到创建的订阅。

创建命名空间、客户端、主题空间和权限绑定

按照快速入门:在 Azure 门户中使用事件网格命名空间发布和订阅 MQTT 消息的说明操作:

  1. 创建事件网格命名空间。
  2. 创建两个客户端。
  3. 创建主题空间。
  4. 创建发布者和订阅者权限绑定。
  5. 使用 MQTTX 应用进行测试,以确认客户端能够发送和接收消息。

为命名空间启用托管标识

在本部分中,将在事件网格命名空间上启用系统分配的托管标识。 然后,授予标识向之前创建的事件网格自定义主题发送的权限,以便它可以将消息路由到自定义主题。 为此,可将托管标识添加到自定义主题上的事件网格数据发送方角色。

  1. 在“事件网格命名空间”页中,在左侧导航菜单上选择“标识”。

    显示“事件网格命名空间”的屏幕截图,其中选择了“标识”选项卡。

  2. 导航到事件网格自定义主题的事件网格主题

  3. 选择左侧导航栏中的“访问控制”。

  4. 在“访问控制”页上选择“添加”,然后选择“添加角色分配”

    显示“访问控制”页的屏幕截图。

  5. “添加角色分配”向导的“角色”页上,选择事件网格数据发送方角色,然后选择页面底部的“下一步”

    显示“添加角色分配”向导的“角色”页的屏幕截图。

  6. 在“添加角色分配”向导的“成员”页,选择“托管标识”,然后选择“选择成员”。

    显示“添加角色分配”向导的“成员”页的屏幕截图。

  7. “选择托管标识”页上,执行以下步骤:

    1. 选择 Azure 订阅

    2. 对于“托管标识”,选择“事件网格命名空间”。

    3. 选择与事件网格命名空间同名的托管标识。

    4. 在页面底部选择“选择”。

      显示“选择托管标识”页的屏幕截图。

  8. 在“添加角色分配”页面中,在页面底部选择“下一步”。

  9. 在“审阅 + 分配”页,查看设置,然后选择页面底部的“审阅 + 分配”

通过自定义主题将路由消息配置到 Azure 函数

在此步骤中,将配置事件网格命名空间的路由,以便接收的消息路由到所创建的自定义主题。

  1. 在“事件网格命名空间”页中,在左侧导航栏上选择“路由”。

  2. 在“路由”页上,选择“启用路由”。

  3. 对于主题类型,选择“自定义主题”。

  4. 对于主题,请选择为本教程创建的自定义主题。

  5. 对于交付的托管标识,选择“系统分配”。

  6. 在页面底部,选择“应用”

    显示命名空间的“路由”页的屏幕截图。

使用 MQTTX 发送测试 MQTT 消息

将测试 MQTT 消息发送到命名空间,并确认函数接收它们。

按照使用 MQTTX 应用发布、订阅消息文章中的说明,将一些测试消息发送到事件网格命名空间。

下面是事件或消息的流:

  1. MQTTX 将消息发送到事件网格命名空间的主题空间。

  2. 消息将路由到配置的自定义主题。

  3. 消息将转发到事件订阅,即 Azure 函数。

  4. 使用日志记录功能验证函数是否已收到该事件。

    显示 Azure 函数的日志流页的屏幕截图。

下一步

请参阅此 GitHub 存储库的代码示例。