了解用于管理事件网格主题的事件域
事件域为数千个与同一应用程序相关的单独主题提供了一个终结点。 可将其视为可包含数千个单独主题的元主题。 它为域中的所有主题提供一个发布终结点。 发布事件时,发布者必须指定要发布到的域中的目标主题。 发布者可以发送一组或一批事件,其中的事件将发送到域中的不同主题。 有关详细信息,请参阅将事件发布到事件域部分。
域还提供对每个主题的身份验证和授权控制,以便你可对租户进行分区。 本文介绍如何使用事件域来管理各种业务组织、客户或应用程序的自定义事件流。 事件域可用于:
- 大规模管理多租户事件驱动的体系结构。
- 管理身份验证和授权。
- 对主题进行分区,而不单独管理每个主题。
- 避免单独发布到每个主题终结点。
注意
事件域不支持广播场景,即将事件发送到域中,域中的每个主题都接收到该事件的副本。 发布事件时,发布者必须指定要发布到的域中的目标主题。 如果发布者想要将相同的事件负载发布到域中的多个主题,则发布者需要复制事件负载,更改主题名称,然后使用域终结点将这些事件负载单独或批量发布到事件网格。
示例用例
解释事件域最简单的方法是采用示例。 假设你经营着 Contoso 建筑机械公司,你在其中制造拖拉机、挖掘设备和其他重型机械。 运营业务时,可向客户推送有关设备维护、系统运行状况、合同更新的实时信息。 所有这些信息都会发布到各种终结点,包括应用、客户终结点以及客户已安装的其他基础结构。
事件域让你可以将 Contoso Construction Machinery 建模为单个事件网格实体。 每个客户表示为域中的主题。 身份验证和授权是使用 Microsoft Entra ID 处理的。 每个客户都可订阅他们的主题并获取传送的事件。 通过事件域管理访问权限可确保客户仅能访问其主题。
此外,你还可获得一个单个终结点,可将所有客户事件发布至此终结点。 事件网格将负责确保每个主题仅获取其租户范围内的事件。
访问管理
使用域,可通过 Azure 基于角色的访问控制 (Azure RBAC) 精细控制每个主题的授权和身份验证情况。 这些角色可用于将应用程序中的每个租户限制为仅可访问经授权的主题。 事件域中 Azure RBAC 的工作方式与托管访问控制在事件网格和 Azure 的其余部分中的工作方式相同。 使用 Azure RBAC 在事件域中创建和强制实施自定义角色定义。
内置角色
事件网格提供两个内置角色定义,使 Azure RBAC 可更方便地用于事件域。 这些角色是“EventGrid EventSubscription 参与者”和“EventGrid EventSubscription 读取者”。 将这些角色分配到需要订阅事件域中的主题的用户。 将角色分配的范围仅限于用户需要订阅的主题。 有关这些角色的信息,请参阅事件网格的内置角色。
订阅主题
订阅事件域中主题的事件与创建自定义主题的事件订阅或订阅 Azure 服务中的事件相同。
重要
域主题在事件网格中被视为自动托管资源。 可以在域范围内创建事件订阅,而无需创建域主题。 在这种情况下,事件网格会代表你自动创建域主题。 当然,你仍然可以选择手动创建域主题。 通过此行为,你可以在处理大量域主题时少担心一个资源。 删除域主题的最后一个订阅时,还会删除域主题,无论该域主题是手动创建还是自动创建的。
域范围订阅
事件域还允许域范围订阅。 在事件域上订阅事件后,无论事件发送到哪个主题,都会收到发送到域的所有事件。 域范围订阅可用于管理和审核工作。
发布到事件域
创建事件域时,将获得一个发布终结点,这与在事件网格中创建主题时类似。 为将事件发布到事件域中的任意主题,请将事件推送到域的终结点,方法与使用自定义主题时相同。 唯一的区别是,必须指定要将事件传递到的主题。 例如,发布以下事件数组后,会将带有 "id": "1111"
的事件发送到主题 foo
,带有 "id": "2222"
的事件发送到主题 bar
。
使用云事件架构时,请将域中的事件网格主题的名称指定为 source
属性的值。 在以下示例中,source
属性在第一个事件中设置为 foo
,在第二个事件中设置为 bar
。
如果要使用其他字段指定域中的预期主题,请在创建域时指定输入架构映射。 例如,如果使用 REST API,请使用 properties.inputSchemaMapping 属性将该字段映射到 properties.topic
。 如果你使用的是 .NET SDK,请使用 EventGridJsonInputSchemaMapping
。 其他 SDK 还支持架构映射。
[{
"source": "foo",
"id": "1111",
"type": "maintenanceRequested",
"subject": "myapp/vehicles/diggers",
"time": "2018-10-30T21:03:07+00:00",
"data": {
"make": "Contoso",
"model": "Small Digger"
},
"specversion": "1.0"
},
{
"source": "bar",
"id": "2222",
"type": "maintenanceCompleted",
"subject": "myapp/vehicles/tractors",
"time": "2018-10-30T21:04:12+00:00",
"data": {
"make": "Contoso",
"model": "Big Tractor"
},
"specversion": "1.0"
}]
事件域会自动处理发布到主题的工作。 可将所有事件发布到域的终结点,而无需将事件发布到单独管理的每个主题。 事件网格确保将每个事件发送到正确的主题。
定价
事件域将使用与事件网格中所有其他功能相同的操作定价。 操作在事件域中的工作方式与在自定义主题中的相同。 事件域每引入一个事件都为一个操作,每尝试传递一个事件都为一个操作。
后续步骤
若要了解有关设置事件域、创建主题、创建事件订阅和发布事件的信息,请参阅管理事件域。