Compartilhar via

快速入门:使用 Azure 门户和Azure Event Grid将自定义事件发送到 Web 终结点

在本快速入门中,你将创建一个主题,使用 Webhook 终结点创建该主题的订阅,触发示例事件,然后查看结果。 通常,你会将事件发送到处理事件数据并执行操作的终结点。 但是,为了简化本教程,你会将事件发送到收集并显示消息的 Web 应用。

先决条件

创建自定义主题

事件网格主题提供用户定义的终结点,可向其发布事件。

  1. 登录到 Azure 门户

  2. 在主题的搜索栏中,键入“事件网格主题”,然后从下拉列表中选择“事件网格主题” 。

    端口搜索栏 Azure的Screenshot,用于搜索事件网格主题.

  3. 在“事件网格主题”页上的工具栏中选择“+ 创建”。

    “事件网格主题”页上的“创建主题”按钮的屏幕截图。

  4. 在“创建主题”页上执行以下步骤:

    1. 选择Azure 订阅

    2. 选择现有的资源组,或者选择“新建”并输入资源组名称

    3. 为自定义主题提供唯一的名称。 主题名称必须唯一,因为它由 DNS 条目表示。 请不要使用图中所示的名称。 而是创建自己的名称 - 它必须介于 3 到 50 个字符之间,并且只包含值 a-z、A-Z、0-9 和 -

    4. 选择事件网格主题的位置。

    5. 在页面底部选择查看 + 创建

      “创建主题”页的屏幕截图。

    6. 在“创建主题”页的“查看 + 创建”选项卡上,选择“创建” 。

      “查看设置和创建”页的屏幕截图。

  5. 部署成功后,选择“转到资源”以导航到您的主题的Event Grid Topic页。 请将此页保持打开状态, 稍后在本快速入门中需要使用它。

    事件网格主题主页的屏幕截图。

    注意

    为保持快速入门的简单性,只需使用 '基本信息' 页即可创建主题。 有关在向导的其他页面上配置网络、安全性和数据驻留设置的详细步骤,请参阅创建自定义主题

创建消息终结点

在为自定义主题创建订阅之前,请先创建事件消息的终结点。 通常情况下,终结点基于事件数据执行操作。 为了简化本快速入门,请部署显示事件消息的 预生成的 Web 应用。 部署的解决方案包括应用服务计划、应用服务 Web 应用以及来自GitHub的源代码。

  1. 在本文中,选择 部署到 Azure 将方案部署到您的订阅。 在Azure门户中,提供参数的值。

    用于将 Resource Manager 模板部署到 Azure 的按钮。

  2. “自定义部署 ”页上,完成以下步骤:

    1. 对于“资源组”,请选择现有的资源组,或创建一个资源组。

    2. 对于“站点名称”,请输入 Web 应用的名称。

    3. 对于“托管计划名称”,请输入用于托管 Web 应用的应用服务计划的名称。

    4. 选择“查看 + 创建”

      “自定义部署”页的屏幕截图。

  3. 在“查看 + 创建”页面上,选择“创建”。

  4. 部署可能需要几分钟时间才能完成。 在门户中选择 “警报 ”(钟形图标),然后选择“ 转到资源组”。

    成功部署消息的屏幕截图,其中包含导航到资源组的链接。

  5. 在“资源组”页上,在资源列表中,选择你创建的 Web 应用(在以下示例中为 contosoegriviewer)。

    包含已部署资源的“资源组”页的屏幕截图。

  6. 在 Web 应用的“应用服务”页上,选择相应的 URL 以导航到该网站。 URL 应采用以下格式:https://<your-site-name>.chinacloudsites.cn

    应用服务页面的屏幕截图,其中突出显示了指向网站的链接。

  7. 确认你可以看到站点,但尚未有任何活动发布到站点。

    事件网格查看器示例应用的屏幕截图。

订阅自定义主题

订阅事件网格主题,告知事件网格要跟踪哪些事件,以及发送事件的位置。

  1. 在自定义主题的“事件网格主题”页上的工具栏中,选择“+ 事件订阅”。

    工具栏上“添加事件订阅”按钮的屏幕截图。

  2. 在“创建事件订阅”页上执行以下步骤:

    1. 输入事件订阅的名称。

    2. 选择Web Hook作为终结点类型

    3. 选择选择终结点

      提供事件订阅值页的屏幕截图。

    4. 对于 Webhook 终结点,请提供你的 Web 应用的 URL,并将 api/updates 添加到主页 URL。 选择“确认选择”。

      提供端点 URL 页面的屏幕截图。

    5. 返回“创建事件订阅”页,选择“创建”。

  3. 再次查看 Web 应用,你会注意到系统已向该应用发送订阅验证事件。 选择眼睛图标以展开事件数据。 事件网格发送验证事件,以便终结点可以验证它是否想要接收事件数据。 Web 应用包含用于验证订阅的代码。

    包含订阅验证事件的事件网格查看器应用的屏幕截图。

向您的主题发送事件

现在,触发一个事件,看看事件网格如何将消息分发到终结点。 使用Azure CLI或 PowerShell 将测试事件发送到自定义主题。 通常,应用程序或Azure服务发送事件数据。

第一个示例使用Azure CLI。 它获取自定义主题的 URL 和密钥,以及示例事件数据。 将自定义主题名称用于 <topic name>。 它将创建示例事件数据。 JSON 的 data 元素是事件的有效负载。 可以将任何格式正确的 JSON 置于此字段中。 也可将主题字段用于高级路由和筛选。 CURL 是发送 HTTP 请求的实用工具。

Azure CLI

  1. 运行以下命令以获取主题的 终结点 。 复制并粘贴命令后,请在运行命令之前更新主题名称和资源组名称。 将示例事件发布到此主题端点。

    endpoint=$(az eventgrid topic show --name <topic name> -g <resource group name> --query "endpoint" --output tsv)
    
  2. 运行以下命令以获取自定义主题的 密钥 。 复制并粘贴命令后,请在运行命令之前更新主题名称和资源组名称。 它是事件网格主题的主密钥。 若要从 Azure 门户获取此密钥,请切换到 Event Grid Topic 页的 Access keys 选项卡。 若要将事件发布到自定义主题,需要访问密钥。

    key=$(az eventgrid topic key list --name <topic name> -g <resource group name> --query "key1" --output tsv)
    
  3. 复制以下包含事件定义的语句,然后按 ENTER

    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"} ]'
    
  4. 运行以下 Curl 命令以发布事件。 在命令中,将 aeg-sas-key 标头设置为之前获取的访问密钥。

    curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
    

Azure PowerShell

第二个示例使用 PowerShell 执行类似的步骤。

  1. 设置以下变量。 复制并粘贴每个命令后,更新主题名称资源组名称,然后运行该命令:

    资源组:

    $resourceGroupName = "<resource group name>"
    

    事件网格主题名称:

    $topicName = "<topic name>"
    
  2. 运行以下命令以获取主题的终结点密钥

    $endpoint = (Get-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $topicName).Endpoint
    $keys = Get-AzEventGridTopicKey -ResourceGroupName $resourceGroupName -Name $topicName
    
  3. 准备活动。 在 PowerShell 窗口中复制并运行这些语句。

    $eventID = Get-Random 99999
    
    #Date format should be SortableDateTimePattern (ISO 8601)
    $eventDate = Get-Date -Format s
    
    #Construct body using Hashtable
    $htbody = @{
        id= $eventID
        eventType="recordInserted"
        subject="myapp/vehicles/motorcycles"
        eventTime= $eventDate   
        data= @{
            make="Ducati"
            model="Monster"
        }
        dataVersion="1.0"
    }
    
    #Use ConvertTo-Json to convert event body from Hashtable to JSON Object
    #Append square brackets to the converted JSON payload since they are expected in the event's JSON payload syntax
    $body = "["+(ConvertTo-Json $htbody)+"]"
    
  4. 使用 Invoke-WebRequest cmdlet 发送事件。

    Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}
    

在事件网格查看器中验证

你已触发事件,并且事件网格已将消息发送到订阅时配置的终结点。 查看 Web 应用以查看刚刚发送的事件。

事件网格查看器的屏幕截图。

清理资源

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

  1. 在左侧菜单中选择 资源组 。 如果在左侧菜单中看不到它,请在左侧菜单中选择 “所有服务 ”,然后选择 “资源组”。

    “资源组”页的屏幕截图。

  2. 选择资源组以打开 “资源组 ”页。

  3. 在工具栏中选择 “删除资源组 ”。

  4. 输入资源组的名称以确认删除,然后选择“删除”。

了解如何创建自定义主题和事件订阅后,请详细了解事件网格的功能: