在 Azure Functions 中创建 Azure EventHub 消息

Create Azure EventHub Message in Azure Functions

我正在尝试使用 EventHub 和 Azure Functions 进行一些概念验证。我在 C# 中有一个通用 Webhook 函数,我想将消息传递到我的 EventHub。

我卡在 "Integrate" 选项卡上给出的参数名称上。如果我在参数中声明该名称,我必须给它一个类型。我不知道是哪种类型...我试过:

我无法让它工作。如果我不这样做,我会收到错误消息: "Missing binding argument named 'outputEventHubMessage'"

如果我输入错误的类型,我会收到消息: "Error indexing method 'Functions.GenericWebhookCSharp1'. Microsoft.Azure.WebJobs.Host: Can't bind to parameter."

我可能有点迷失在文档中或者只是有点累了,但我很感激这里的任何帮助!

/乔金

可能您只是缺少参数中的 out 关键字。下面是一个有效的 WebHook 函数,它声明一个映射到 EventHub 输出的 out string message 参数,并通过 message = "Test Message".

写入 EventHub 消息

因为异步函数无法 return 输出参数,所以我将此函数设为同步(returning object 而不是 Task<object>)。如果你想保持异步,而不是使用 out 参数,你可以改为绑定到 IAsyncCollector<string> 参数。然后,您可以通过调用收集器上的 AddAsync 方法将一条或多条消息加入队列。

可以找到有关 EventHub 绑定及其支持的类型的更多详细信息here。请注意,其他绑定遵循相同的一般模式。

#r "Newtonsoft.Json"

using System;
using System.Net;
using Newtonsoft.Json;

public static object Run(HttpRequestMessage req, out string message, TraceWriter log)
{
    string jsonContent = req.Content.ReadAsStringAsync().Result;
    dynamic data = JsonConvert.DeserializeObject(jsonContent);

    log.Info($"Webhook was triggered! Name = {data.first}");

    message = "Test Message";

    var res = req.CreateResponse(HttpStatusCode.OK, new {
        greeting = $"Hello {data.first} {data.last}!"
    });

    return res;
}