快速入门:使用事件网格和 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. 指定 Azure 存储帐户的唯一名称:

    storagename="<STORAGE ACCOUNT NAME>"    
    
  2. 运行以下命令,在存储中创建存储帐户和队列(名为 eventqueue):

    queuename="eventqueue"
    
    az storage account create -n $storagename -g gridResourceGroup -l chinanorth2 --sku Standard_LRS
    key="$(az storage account keys list -n $storagename --query "[0].{value:value}" --output tsv)"    
    az storage queue create --name $queuename --account-name $storagename --account-key $key
    

订阅自定义主题

以下示例订阅所创建的自定义主题,并传递终结点队列的资源 ID。 通过 Azure CLI,可采用终结点的形式传递队列 ID。 终结点的格式如下:

/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP NAME>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/queueservices/default/queues/<QUEUE NAME>

以下脚本获取队列存储帐户的资源 ID。 它构造队列 ID 并订阅事件网格主题。 它将终结点类型设置为 storagequeue 并使用终结点的队列 ID。

运行命令之前,请将到期日期 (<yyyy-mm-dd>) 的占位符替换为年、月、日的实际值。

storageid=$(az storage account show --name $storagename --resource-group gridResourceGroup --query id --output tsv)
queueid="$storageid/queueservices/default/queues/$queuename"
topicid=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name mystoragequeuesubscription \
  --endpoint-type storagequeue \
  --endpoint $queueid \
  --expiration-date "<yyyy-mm-dd>"

创建事件订阅的帐户必须对队列具有写权限。 请注意为订阅设置到期日期。

如果使用 REST API 创建订阅,则以独立参数的形式传递存储帐户 ID 和队列名称:

"destination": {
  "endpointType": "storagequeue",
  "properties": {
    "queueName":"eventqueue",
    "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>"
  }
  ...

向自定义主题发送事件

触发一个事件,查看事件网格如何将消息分发到终结点。 首先,获取自定义主题的 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 门户中的队列,请注意,事件网格会将这三个事件发送到队列。

显示队列中从事件网格接收的消息列表的屏幕截图。

清理资源

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

az group delete --name gridResourceGroup

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

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