快速入门:使用 Azure CLI 和事件网格将自定义事件路由到 Azure 事件中心

Azure 事件网格是一个高度可缩放的无服务器事件代理,可用于集成使用事件的应用程序。 事件网格会将事件传递到支持的事件处理程序,Azure 事件中心就是其中之一。 本文使用 Azure CLI 执行以下步骤:

  1. 创建事件网格自定义主题。
  2. 为自定义主题创建 Azure 事件中心订阅。
  3. 将示例事件发送到自定义主题。
  4. 验证这些事件是否已传递到事件中心。

如果没有 Azure 订阅,可在开始前创建一个试用帐户

创建资源组

事件网格主题是 Azure 资源,必须放置在 Azure 资源组中。 该资源组是在其中部署和管理 Azure 资源的逻辑集合。

使用“az group create”命令创建资源组。 以下示例在“chinanorth2”位置创建名为“gridResourceGroup”的资源组。

az group create --name gridResourceGroup --location chinanorth2

启用事件网格资源提供程序

  1. 如果以前未在 Azure 订阅中使用过事件网格,则可能需要注册事件网格资源提供程序。 运行以下命令,注册提供程序:

    az provider register --namespace Microsoft.EventGrid
    
  2. 完成注册可能需要一些时间。 若要查看状态,请运行以下命令:

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    registrationStateRegistered 后,即可继续。

创建自定义主题

事件网格主题提供用户定义的终结点,可向其发布事件。 以下示例在资源组中创建自定义主题。 将 <topic_name> 替换为自定义主题的唯一名称。 事件网格主题名称必须唯一,因为它由域名系统 (DNS) 条目表示。

  1. 指定主题的名称。

    topicname="<TOPIC NAME>"
    
  2. 运行下面的命令来创建主题。

    az eventgrid topic create --name $topicname -l chinanorth2 -g gridResourceGroup
    

创建事件中心

在订阅自定义主题之前,让我们创建事件消息的终结点。 创建用于收集事件的事件中心。

  1. 为事件中心命名空间指定独一无二的名称。

    namespace="<EVENT HUBS NAMESPACE NAME>"
    
  2. 运行以下命令,在该命名空间中创建事件中心命名空间和名为 demohub 的事件中心。

    hubname=demohub
    
    az eventhubs namespace create --name $namespace --resource-group gridResourceGroup
    az eventhubs eventhub create --name $hubname --namespace-name $namespace --resource-group gridResourceGroup
    

订阅自定义主题

订阅事件网格主题是为了告知事件网格要跟踪哪些事件。以下示例订阅所创建的自定义主题,并传递终结点事件中心的资源 ID。 终结点的格式如下:

/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.EventHub/namespaces/<NAMESPACE NAME>/eventhubs/<EVENT HUB NAME>

以下脚本获取事件中心的资源 ID,并订阅事件网格主题。 它将终结点类型设置为 eventhub 并使用终结点的事件中心 ID。

hubid=$(az eventhubs eventhub show --name $hubname --namespace-name $namespace --resource-group gridResourceGroup --query id --output tsv)
topicid=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name subtoeventhub \
  --endpoint-type eventhub \
  --endpoint $hubid

创建事件订阅的帐户必须对事件中心具有写访问权限。

向自定义主题发送事件

让我们触发一个事件,看看事件网格如何将消息分发到终结点。 首先,让我们获取自定义主题的 URL 和密钥。

endpoint=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name $topicname -g gridResourceGroup --query "key1" --output tsv)

为简化本文,将使用要发送到自定义主题的示例事件数据。 通常情况下,应用程序或 Azure 服务会发送事件数据。 CURL 是发送 HTTP 请求的实用工具。 本文使用 CURL 向自定义主题发送事件。 以下示例将三个事件发送到事件网格主题:

for i in 1 2 3
do
   event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
   curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
done

请注意,在 Azure 门户中的事件中心命名空间的“概述”页上,事件网格已将这三个事件发送到事件中心。 demohub 事件中心实例页的“概述”页上会显示相同的图表。

Image showing the portal page with incoming message count as 3.

通常,你将创建一个从事件中心检索事件的应用程序。 若要创建从事件中心获取消息的应用程序,请参阅:

清理资源

如果打算继续处理此事件,请不要清除本文中创建的资源。 否则,请使用以下命令删除本文中创建的资源。

az group delete --name gridResourceGroup

后续步骤

了解如何创建主题和事件订阅以后,即可进一步学习事件网格的功能:

请查看以下示例,了解如何使用不同的编程语言将事件发布到事件网格以及如何从事件网格使用事件。