65.9K
CodeProject 正在变化。 阅读更多。
Home

将无服务器函数连接到事件网格自定义主题

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2018 年 3 月 31 日

CPOL

2分钟阅读

viewsIcon

11853

如何从事件网格自定义主题触发 Azure 无服务器函数

引言

Azure Event Grid 中,自定义主题是一种用户定义的事件类型,可以将事件路由到一个或多个订阅者。 

创建自定义主题

您可以通过 Azure 门户搜索“Event Grid Topic”(事件网格主题)来添加事件网格自定义主题

您需要提供一个唯一的主题名称 - 并且使用一个长而描述性的名称是个好主意,因为您将在链接订阅者时使用它。

将自定义主题分组到资源组中是个好主意。

编写函数

首先需要安装将用于与 Azure 事件网格交互的包

然后需要将这些包导入到将提供无服务器函数的类中。

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Azure.WebJobs.Host;

要编写可以响应由主题传递的事件网格消息的函数,我们使用 FunctionName 属性使其为 Azure 函数应用所知,并使用 EventGridTrigger 属性将第一个参数标记为来自事件网格消息。

此示例只是回显消息的内容,这对于测试自定义主题是否正确触发非常有用。

        [FunctionName("EchoContent")]
        public static void EchoContent([EventGridTrigger] EventGridEvent eventGridEvent,
               TraceWriter log)
        {
            log.Info($"Echo function executed at: {DateTime.Now}");

            log.Info($"Topic : {eventGridEvent.Topic} , Subject : {eventGridEvent.Subject } , 
                                Event Type: {eventGridEvent.EventType }  ");
            log.Info($" Payload : { eventGridEvent.Data.ToString()} ");

        }

将函数链接到主题

Azure 门户中,导航到函数应用并找到要附加到自定义主题的函数。  在包含 function.json 的窗格的右侧,您将看到一个标题为“Add Event Grid subscription”(添加事件网格订阅)的链接。 

这将弹出一个任务窗格,您需要用自定义主题属性填写该窗格

您可以对希望由相同事件中心自定义事件通知触发的任何其他无服务器函数重复此过程。

向事件网格主题发送消息

您可以使用 curl 或任何类似的工具向自定义主题 POST 事件(实际上,我使用并推荐 PostMan)。

您需要的 URL 是 https://{topic name}.{region}.eventgrid.azure.net/api/events 

您需要在标有 aeg-sas-key 的标头中添加一个令牌,该令牌包含您的身份验证密钥,并将 Content-Type 设置为 application/json

然后将消息内容传递到消息主体中:-

[{
    "topic": "/subscriptions/9f18ed62-6f67-4bb8-e272-407f08a7b20d/resourceGroups/
               thelongrun/providers/microsoft.eventgrid/topics/create-new-league-command",
    "subject": "TheLongRun/Leagues/blackrock-meet-and-train",
    "eventType": "Create-New-League-Command",
    "eventTime": "2018-03-30T21:42:00.9584103Z",
    "id": "831f1650-001e-001b-62ab-ecb72e000822",
    "data": {
      "LeagueName": "Blackrock Meet And Train",
      "Date_Incorporated" : "2018-01-01T16:41:00.9584103Z",
      "Location" : "Blackrock, County Dublin, Ireland",
      "Twitter_Handle" : "@Blackrock_AC",
      "Email_Address" : "information@blackrockathleticclub.ie"
    }
  }]

您的消息的自定义内容包含在 data 对象中。

历史

  • 2018-03-31- 初稿
© . All rights reserved.