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

Azure 事件网格是一个高度可缩放的无服务器事件代理,可用于通过事件集成应用程序。 事件网格会将事件传递到支持的事件处理程序,Azure 事件中心就是其中之一。

在本快速入门中,你将使用 Azure CLI 创建一个事件网格自定义主题,并为该主题创建事件中心订阅。 然后将示例事件发送到该自定义主题,并验证这些事件是否已传递到事件中心。

如果没有 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 事件中心实例的“概述”页上会显示相同的图表。

显示门户页面的屏幕截图,其中传入消息计数为 3。

通常,你将创建一个从事件中心检索事件消息的应用程序。 有关详细信息,请参阅:

清理资源

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

az group delete --name gridResourceGroup

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

若要了解如何使用各种编程语言将事件发布到事件网格以及如何在事件网格中使用事件,请查看以下示例: