适用于 Azure Functions 的 Azure 事件网格输出绑定

使用事件网格输出绑定将事件写入到自定义主题。 必须拥有有效的自定义主题访问密钥

有关设置和配置的详细信息,请参阅概述

备注

事件网格输出绑定不支持共享访问签名(SAS 令牌)。 必须使用该主题的访问密钥。

重要

事件网格输出绑定仅适用于 Functions 2.x 和更高版本。

示例

C#(2.x 及更高版本)

以下示例演示了一个 C# 函数它使用方法返回值作为输出,将消息写入到事件网格自定义主题:

[FunctionName("EventGridOutput")]
[return: EventGrid(TopicEndpointUri = "MyEventGridTopicUriSetting", TopicKeySetting = "MyEventGridTopicKeySetting")]
public static EventGridEvent Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
    return new EventGridEvent("message-id", "subject-name", "event-data", "event-type", DateTime.UtcNow, "1.0");
}

以下示例显示了如何使用 IAsyncCollector 接口来发送一批消息。

[FunctionName("EventGridAsyncOutput")]
public static async Task Run(
    [TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
    [EventGrid(TopicEndpointUri = "MyEventGridTopicUriSetting", TopicKeySetting = "MyEventGridTopicKeySetting")]IAsyncCollector<EventGridEvent> outputEvents,
    ILogger log)
{
    for (var i = 0; i < 3; i++)
    {
        var myEvent = new EventGridEvent("message-id-" + i, "subject-name", "event-data", "event-type", DateTime.UtcNow, "1.0");
        await outputEvents.AddAsync(myEvent);
    }
}

版本 3.x(预览版)

以下示例演示绑定到 CloudEvent 的 Functions 3.x C# 函数

using System.Threading.Tasks;
using Azure.Messaging;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Azure.WebJobs.Extensions.Http;

namespace Azure.Extensions.WebJobs.Sample
{
    public static class CloudEventBindingFunction
    {
        [FunctionName("CloudEventBindingFunction")]
        public static async Task<IActionResult> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            [EventGrid(TopicEndpointUri = "EventGridEndpoint", TopicKeySetting = "EventGridKey")] IAsyncCollector<CloudEvent> eventCollector)
        {
            CloudEvent e = new CloudEvent("IncomingRequest", "IncomingRequest", await req.ReadAsStringAsync());
            await eventCollector.AddAsync(e);
            return new OkResult();
        }
    }
}

以下示例演示绑定到 EventGridEvent 的 Functions 3.x C# 函数

using System.Threading.Tasks;
using Azure.Messaging.EventGrid;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;

namespace Azure.Extensions.WebJobs.Sample
{
    public static class EventGridEventBindingFunction
    {
        [FunctionName("EventGridEventBindingFunction")]
        public static async Task<IActionResult> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            [EventGrid(TopicEndpointUri = "EventGridEndpoint", TopicKeySetting = "EventGridKey")] IAsyncCollector<EventGridEvent> eventCollector)
        {
            EventGridEvent e = new EventGridEvent(await req.ReadAsStringAsync(), "IncomingRequest", "IncomingRequest", "1.0.0");
            await eventCollector.AddAsync(e);
            return new OkResult();
        }
    }
}

特性和注释

对于 C# 类库,使用 EventGridAttribute 特性。

该特性的构造函数可接受包含自定义主题名称的应用设置的名称,以及包含主题密钥的应用设置的名称。 有关这些设置的详细信息,请参阅输出 - 配置。 下面是 EventGrid 特性的示例:

[FunctionName("EventGridOutput")]
[return: EventGrid(TopicEndpointUri = "MyEventGridTopicUriSetting", TopicKeySetting = "MyEventGridTopicKeySetting")]
public static string Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
    ...
}

有关完整示例,请参阅示例

配置

下表解释了在 function.json 文件和 EventGrid 特性中设置的绑定配置属性。

function.json 属性 Attribute 属性 说明
type 不适用 必须设置为“eventGrid”。
direction 不适用 必须设置为“out”。 在 Azure 门户中创建绑定时,会自动设置该参数。
name 不适用 函数代码中使用的表示事件的变量名称。
topicEndpointUri TopicEndpointUri 包含自定义主题 URI 的应用设置的名称,例如 MyTopicEndpointUri
topicKeySetting TopicKeySetting 包含自定义主题访问密钥的应用设置的名称。

在本地进行开发时,应用设置将取 local.settings.json 文件的值。

重要

确保将 TopicEndpointUri 配置属性的值设置为包含自定义主题 URI 的应用设置的名称。 请勿直接在此属性中指定自定义主题的 URI。

使用情况

可以使用 out EventGridEvent paramName 等方法参数发送消息。 若要编写多条消息,可以使用 ICollector<EventGridEvent>IAsyncCollector<EventGridEvent> 代替 out EventGridEvent

其他类型

使用事件网格扩展 3.0.0 或更高版本的应用使用 Azure.Messaging.EventGrid 命名空间中的 EventGridEvent 类型。 此外,还可以从 Azure.Messaging 命名空间绑定到 CloudEvent 类型。

后续步骤