gpt4 book ai didi

Azure Function v4 .net6 事件中心触发器 - 如何获取 EnqueuedTimeUTC?

转载 作者:行者123 更新时间:2023-12-03 04:53:30 24 4
gpt4 key购买 nike

我有一个正在运行的 Azure Functions 应用程序,带有事件中心触发器。它使用 Microsoft.Azure.Functions.Worker 1.10、函数运行时 4、.Net 6 并作为独立运行(不是进程内)。

当前函数签名如下所示:

    Function("MyFunction")]
public async Task Run([EventHubTrigger("my-eventhub",
ConsumerGroup = "a-consumer-group",
Connection = "EventHub.ConnectionString")] string[] messages)
{
//Do stuff
}

我想扩展它以获取排队时间(事件在事件中心结束的时间)。

所以,我意识到在 Functions Runtime v4 中,我无法像在旧版本中那样获取 EventData[],而是应该使用 BindingContext。

所以我尝试了这个:

    Function("MyFunction")]
public async Task Run([EventHubTrigger("my-eventhub",
ConsumerGroup = "a-consumer-group",
Connection = "EventHub.ConnectionString")] string[] messages, FunctionContext context)
{
var data = context.BindingContext.BindingData["enqueuedTimeUtcArray"];

//data would always be empty
}

发现这是错误的方法,并看到了进一步分解字段的示例,我尝试了以下方法:

    Function("MyFunction")]
public async Task Run([EventHubTrigger("my-eventhub",
ConsumerGroup = "a-consumer-group",
Connection = "EventHub.ConnectionString")] string[] messages,
DateTime[] enqueuedTimeUtcArray,
long[] sequenceNumberArray,
string[] offsetArray,
Dictionary<string, JsonElement>[] propertiesArray,
Dictionary<string, JsonElement>[] systemPropertiesArray))
{
var data = enqueuedTimeUtcArray;

//data would always be empty
}

我尝试了这些主题的各种变体,包括引用以下内容:

函数仍然会触发,并且它提供的功能(替换为//do stuff)仍然会顺利进行,但仍然没有 EnqueueTimes...我做错了什么?

最佳答案

对于那些将来阅读的人,以下是最终的可行解决方案,在评论中得到了 David Browne 的大力帮助:

        Function("MyFunction")]
public async Task Run([EventHubTrigger("my-eventhub",
ConsumerGroup = "a-consumer-group",
Connection = "EventHub.ConnectionString")] string[] messages, FunctionContext context)
{
var data = context.BindingContext.BindingData["enqueuedTimeUtcArray"];

var listOfDateTimes = JsonSerializer.Deserialize<string[]>(data["EnqueuedTimeUtcArray"].ToString())
.Select(a => DateTime.Parse(a.ToString())).ToList()

//Do stuff
}

重新启动电脑后,我终于开始从 FunctionContext 接收数据(我不知道...),然后意识到我收到了一个 json 字符串数组,它们与日期时间兼容。因此,反序列化它们就是答案。

关于Azure Function v4 .net6 事件中心触发器 - 如何获取 EnqueuedTimeUTC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75607267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com