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

Azure 事件网格命名空间概念

本文介绍与命名空间主题相关的主要概念和功能。

事件

事件是完全描述系统中所发生情况的最少量信息。 我们经常将事件称为离散事件,因为它代表了有关系统的明确独立事实,提供可操作的见解。 每个事件具有通用信息,例如事件的 source、事件发生的 time 和唯一标识符。 每个事件还有一个 type,这通常是用于描述使用事件的公告类型的唯一标识符。

例如,与在 Azure 存储中创建的有关新文件的事件将包含有关该文件的详细信息,如 lastTimeModified 值。 事件中心事件具有 Capture 文件的 URL。 订单微服务中有关新订单的事件可能具有一个 orderId 属性,以及一个表示订单状态的 URL 属性。 其他事件类型的例子还包括:com.yourcompany.Orders.OrderCreatedorg.yourorg.GeneralLedger.AccountChangedio.solutionname.Auth.MaximumNumberOfUserLoginAttemptsReached

下面是一个示例事件:

{
    "specversion" : "1.0",
    "type" : "com.yourcompany.order.created",
    "source" : "/orders/account/123",
    "subject" : "O-28964",
    "id" : "A234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "comexampleextension1" : "value",
    "comexampleothervalue" : 5,
    "datacontenttype" : "application/json",
    "data" : {
       "orderId" : "O-28964",
       "URL" : "https://com.yourcompany/orders/O-28964"
    }
}

另一种事件

用户社区也将携带数据点的消息(例如一条设备读取数据或 Web 应用程序页面单击操作)称为“事件”。 通常会基于时间窗口分析这种事件,以得出见解并采取措施。 在事件网格的文档中,我们将这种事件称为数据点、流数据或简称为遥测数据。 此类型的事件(以及一些其他类型的消息)与事件网格的消息队列遥测传输 (MQTT) 中转站功能配合使用。

对 CloudEvents 的支持

事件网格命名空间主题接受符合云原生计算基础 (CNCF) 开放标准 CloudEvents 1.0 规范的事件,该规范使用 JSON 格式HTTP 协议绑定。 CloudEvent 是一种消息,包含要传递的内容(称为事件数据)和相关元数据。 事件驱动体系结构中的事件数据通常携带宣告系统状态更改的信息。 CloudEvents 元数据由一组属性构成,这些属性提供有关消息的上下文信息,例如消息来源(源系统)、其类型等。

有关详细信息,请参阅对 CloudEvents 架构的支持

发布服务器

发布服务器是将事件发送到事件网格的应用程序。 它可以是事件的来源应用程序,即事件源。 使用命名空间主题时,你可以从自己的应用程序发布事件。

事件源

事件源即事件发生的位置。 每个事件源支持一种或多种事件类型。 例如,你的应用程序是你的系统定义的自定义事件的事件源。 使用命名空间主题时,支持的事件源是你自己的应用程序。

命名空间

事件网格命名空间是以下资源的管理容器:

资源 支持的协议
命名空间主题 HTTP
主题空间 MQTT
客户端 MQTT
客户端组 MQTT
CA 证书 MQTT
权限绑定 MQTT

使用 Azure 事件网格命名空间,可以将相关资源归组,并将其作为 Azure 订阅中的单个单元进行管理。 它提供唯一的完全限定的域名 (FQDN)。

命名空间公开两个终结点:

  • 一个 HTTP 终结点,用于支持使用命名空间主题的一般消息传递要求。
  • 一个 MQTT 终结点,用于使用 MQTT 的 IoT 消息传递或解决方案。

命名空间还提供与 DNS 集成的网络终结点。 还提供一系列访问控制和网络集成管理功能,例如公共 IP 入口筛选和专用链接。 它也是用于命名空间中所含资源的托管标识的容器。

以下进一步阐述了有关命名空间的一些要点:

  • 命名空间是具有 tagslocation 属性的受跟踪资源,创建后可在 resources.azure.com 上找到它。
  • 命名空间的名称长度可为 3-50 个字符。 它可以包含字母数字和连字符 (-),不能包含空格。
  • 该名称在每个区域中必须唯一。

吞吐量单位

吞吐量单位 (TU) 定义命名空间中的入口和出口事件速率容量。 有关详细信息,请参阅 Azure 事件网格配额和限制

主题

主题包含已发布到事件网格的事件。 通常会将主题资源用于相关事件的集合。 命名空间中的主题通常称为命名空间主题

命名空间主题

命名空间主题是在事件网格命名空间中创建的主题。 应用程序将事件发布到 HTTP 命名空间终结点,该终结点指定了以逻辑方式包含已发布的事件的命名空间主题。 在设计应用程序时,必须确定要创建多少个主题。 对于相对较大的解决方案,请为相关事件的每个类别创建一个命名空间主题。 例如,假设一个应用程序需要管理用户帐户,另一个应用程序需要管理客户订单。 不太可能所有事件订阅者都需要这两个应用程序的事件。 若要将问题分开,请创建两个命名空间主题:为每个应用程序各创建一个。 让事件使用者根据其要求订阅主题。 对于小型解决方案,可能希望将所有事件发送到单个主题。

命名空间主题支持拉取传递推送传递。 请参阅何时使用拉取传递或推送传递,以帮助确定拉取传递是否符合你的要求。

事件订阅

事件订阅是与单个主题关联的配置资源。 此外,可以使用事件订阅来设置事件选择条件,以便基于主题中的整个事件集定义订阅服务器可用的事件集合。 可以根据订阅者的要求筛选事件。 例如,可以按事件类型筛选事件。 如果将 JSON 对象作为数据属性的值,还可以定义事件数据属性的筛选条件。 有关资源属性的详细信息,请查看事件网格 REST API 中的控制平面操作。

显示主题和关联事件订阅的示意图。

有关为命名空间主题创建订阅的示例,请参阅使用 CLI 和命名空间主题发布和使用消息

注意

与在自定义、域、合作伙伴和系统主题(事件网格基本版)中使用的相比,命名空间主题下的事件订阅具有简化的资源模型。 有关详细信息,请参阅“创建、查看和管理事件订阅”。

拉取传递

通过拉取传递,应用程序使用类似队列的语义连接到事件网格并读取消息。 当应用程序连接到事件网格以使用事件时,可以控制事件使用速率及时间。 当使用专用 IP 空间连接事件网格以读取事件时,要使用数据的应用程序还可使用专用终结点。

拉取传递支持在读取消息和控制消息状态时使用以下操作:接收确认释放拒绝续订锁定。 有关详细信息,请参阅拉取传递概述

使用拉取传递接收事件时的数据形状

使用拉取传递来传递事件时,事件网格包含一组对象,这些对象又包括 eventbrokerProperties 对象。 事件属性的值是在结构化内容模式下传递的 CloudEvent。 brokerProperties 对象包含与传递的 CloudEvent 关联的锁定令牌。 以下 json 对象是一个接收操作的示例响应,该操作返回两个事件:

{
    "value": [
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDXYS23Z+5Hq754VqQjxywE",
                "deliveryCount": 2
            },
            "event": {
                "specversion": "1.0",
                "id": "A234-1234-1235",
                "source": "/mycontext",
                "time": "2018-04-05T17:31:00Z",
                "type": "com.example.someeventtype",
                "data": "some data"
            }
        },
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDLeaL+nRJLNq3/5NXd/T0b",
                "deliveryCount": 1
            },
            "event": {
                "specversion": "1.0",
                "id": "B688-1234-1235",
                "source": "/mycontext",
                "type": "com.example.someeventtype",
                "time": "2018-04-05T17:31:00Z",
                "data": {
                    "somekey" : "value",
                    "someOtherKey" : 9
                }
            }
        }
    ]
}

推送传递

使用推送传递时,事件网格会将事件发送到一个推送(传递模式)事件订阅中配置的目标。 它提供了可靠的重试逻辑以防该目标无法接收事件。

重要

事件网格命名空间的推送传递目前支持以 Azure 事件中心为目标。 以后事件网格命名空间会支持更多目标,包括“事件网格基本版”支持的所有目标。

事件中心事件传递

事件网格使用事件中心 SDK 通过 AMQP 将事件发送到事件中心。 事件以字节数组的形式发送,其中有包含 CloudEvent 的数组中的每个元素。

推送和拉取传递

事件网格使用 HTTP 来支持推送和拉取事件传递。 使用推送传递时,需要在事件订阅、Webhook 或 Azure 服务中定义一个目标,以便事件网格将事件发送到该目标。 使用拉取传递时,订阅服务器应用程序将连接到事件网格以使用事件。 事件网格命名空间中的主题支持拉取传递。

重要

支持将事件中心作为命名空间主题订阅的目标。 在即将发布的版本中,事件网格命名空间支持事件网格基本版中当前支持的所有目标以及更多目标。

显示推送传递和拉取传递以及涉及的资源类型的概要示意图。

何时使用推送传递与拉取传递

以下一般指导原则可帮助你确定何时使用拉取传递或推送传递。

拉取传递

  • 完全由你控制何时接收事件。 例如,应用程序可能不会一直运行、不够稳定,或者你要在特定的时间处理数据。
  • 完全由你控制事件的使用。 例如,使用者应用程序中的下游服务或层出现问题,导致无法处理事件。 在这种情况下,拉取传递 API 允许使用者应用将已读取的事件释放回代理,以便可以稍后传递。
  • 你希望在接收事件时使用专用链接,这只能通过拉取传递实现,推送传递则不支持。
  • 你无法公开终结点和使用推送传递,但可以连接到事件网格以使用事件。

推送传递

  • 你希望避免通过不断的轮询来确定是否发生了系统状态更改。 你希望在发生状态更改时使用事件网格向你发送事件。
  • 你的某个应用程序无法发出出站调用。 例如,你的组织可能担心数据外泄。 但是,应用程序可以通过公共终结点接收事件。