Compartir a través de

使用事件域管理主题和发布事件

本文介绍以下操作:

  • 创建事件网格域
  • 订阅 Event Grid 主题
  • 列出密钥
  • 将事件发布到域

若要了解事件域,请参阅了解用于管理事件网格主题的事件域

创建事件域

若要管理大型主题集,请创建一个事件域。

az eventgrid domain create \
  -g <my-resource-group> \
  --name <my-domain-name> \
  -l <location>

创建成功后会返回以下值:

{
  "endpoint": "https://<my-domain-name>.chinanorth2-1.eventgrid.azure.cn/api/events",
  "id": "/subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>",
  "inputSchema": "EventGridSchema",
  "inputSchemaMapping": null,
  "location": "chinanorth2",
  "name": "<my-domain-name>",
  "provisioningState": "Succeeded",
  "resourceGroup": "<my-resource-group>",
  "tags": null,
  "type": "Microsoft.EventGrid/domains"
}

请记下 endpointid,因为需要使用它们来管理域和发布事件。

管理对主题的访问

可通过角色分配来管理对主题的访问。 角色分配使用Azure基于角色的访问控制来限制特定范围内的授权用户对Azure资源执行的操作。

事件网格包含两个内置角色,可以使用这些角色为特定用户分配对域中不同主题的访问权限。 这些角色为 EventGrid EventSubscription Contributor (Preview)EventGrid EventSubscription Reader (Preview),分别用于创建/删除订阅,以及只允许列出事件订阅。

以下Azure CLI命令限制alice@contoso.com仅在主题 demotopic1上创建和删除事件订阅:

az role assignment create \
  --assignee alice@contoso.com \
  --role "EventGrid EventSubscription Contributor (Preview)" \
  --scope /subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>/topics/demotopic1

有关管理对事件网格操作的访问权限的详细信息,请参阅事件网格安全性和身份验证

创建主题和订阅

事件网格服务会根据创建域主题事件订阅的请求,在域中自动创建并管理相应的主题。 没有单独的步骤可以在域中创建主题内容。 同样,当删除某个主题的最后一个事件订阅时,该主题也会被删除。

订阅域中的主题与订阅任何其他 Azure 资源相同。 对于源资源 ID,指定之前在创建域时返回的事件域 ID。 若要指定想要订阅的主题,请将 /topics/<my-topic> 添加到源资源 ID 的末尾。 若要创建接收域中的所有事件的域范围事件订阅,请指定事件域 ID 且不要指定任何主题。

通常情况下,将由你在前面的部分中向其授予了访问权限的用户创建订阅。 为了简化本文,由你来创建订阅。

az eventgrid event-subscription create \
  --name <event-subscription> \
  --source-resource-id "/subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>/topics/demotopic1" \
  --endpoint https://contoso.chinacloudsites.cn/api/updates

如果需要测试终结点来订阅事件,您可以随时部署一个预构建的 Web 应用 来显示传入的事件。 您可以将您的事件发送到您的测试网站 (https://<your-site-name>.chinacloudsites.cn/api/updates)。

用于将 资源管理器 模板部署到 Azure 的按钮。

为主题设置的权限存储在Microsoft Entra ID中,必须显式删除。 如果用户对主题拥有写访问权限,则删除事件订阅不会撤销用户创建事件订阅的访问权限。

将事件发布到事件网格域

将事件发布到域的过程与发布到自定义主题相同。 但是,不是发布到自定义主题,而是将所有事件发布到域终结点。 在 JSON 事件数据中,可以指定要将事件发送到的主题。 例如,以下事件数组会导致将包含 "id": "1111" 的事件发送到主题 demotopic1,将包含 "id": "2222" 的事件发送到主题 demotopic2

[{
  "topic": "demotopic1",
  "id": "1111",
  "eventType": "maintenanceRequested",
  "subject": "myapp/vehicles/diggers",
  "eventTime": "2018-10-30T21:03:07+00:00",
  "data": {
    "make": "Contoso",
    "model": "Small Digger"
  },
  "dataVersion": "1.0"
},
{
  "topic": "demotopic2",
  "id": "2222",
  "eventType": "maintenanceCompleted",
  "subject": "myapp/vehicles/tractors",
  "eventTime": "2018-10-30T21:04:12+00:00",
  "data": {
    "make": "Contoso",
    "model": "Big Tractor"
  },
  "dataVersion": "1.0"
}]

要使用 Azure CLI 获取域终结点,请使用以下命令

az eventgrid domain show \
  -g <my-resource-group> \
  -n <my-domain>

若要获取域的密钥,请使用:

az eventgrid domain key list \
  -g <my-resource-group> \
  -n <my-domain>

然后,使用偏好的方法发出 HTTP POST,将事件发布到事件网格域。

注意

有关使用编程语言 SDK 将事件发布到事件网格域的示例,请使用以下链接:

搜索关于主题或订阅的列表

若要搜索和管理大量主题或订阅,事件网格的 API 支持列表和分页。

使用命令行界面 (CLI)

例如,以下命令列出名称包含 mytopic 的所有主题。

az eventgrid topic list --odata-query "contains(name, 'mytopic')"

有关此命令的详细信息,请参阅az eventgrid topic list

后续步骤