gpt4 book ai didi

c# - 是否可以创建一个可从 EventHub 中的多个事件触发的编排持久函数?

转载 作者:行者123 更新时间:2023-12-03 02:43:09 30 4
gpt4 key购买 nike

我猜想有一个与Can durable functions have multiple triggers?类似的问题,但我本身并没有尝试多个触发器。

我的用例是我有一个触发持久函数的 EventHub。我想监听第 N 个事件,其中包含特定 id 的有效负载中的特定模式(也在有效负载中)

当收到第n个事件时,我可以轻松地启动另一个事件,但我可以解决的是如何在开始时执行有状态位?

如果持久函数不能支持这一点,Azure 中还有哪些其他选项可以做类似的事情?

event       id      event name
1 1 login
2 1 navigate
3 2 login
4 2 do something
5 1 do something of interest
6 1 do something of interest (again, this is what I was to trigger the activity on)

此信息当前来自事件中心并触发我的函数。

最佳答案

这可能是 Durable Entities 的一个很好的用例(耐用功能的一项新功能)。您的实体的 ID 可以从事件负载中的 ID 派生。通过您的 EventHub 触发函数,您可以在每次看到您要查找的模式时向特定实体发送信号。当第一个事件到达时,持久实体将自动创建,并且可以在采取某些操作之前简单地计算事件的数量。

例如,以下是事件中心触发函数:

[FunctionName("ProcessEvents")]
public static async Task ProcessEvents(
[EventHubTrigger("event-source")] EventData input,
[DurableClient] IDurableClient client)
{
if (IsOfInterest(input))
{
var id = new EntityId("MyDetector", (string)input.Properties["ID"]);
await client.SignalEntityAsync(id, nameof(MyDetector.Process), input);
}

// ...
}

...这是实体函数(实现为 .NET class ):

[JsonObject(MemberSerialization.OptIn)]
public class MyDetector
{
[JsonProperty]
public int CurrentEventCount { get; set; }

public void Process(EventData input)
{
// Take some action if this event happens N or more times
if (++this.CurrentEventCount >= 10)
{
TakeSomeAction(input);

// reset the counter
this.CurrentEventCount = 0;
}
}

[FunctionName(nameof(MyDetector))]
public static Task Run([EntityTrigger] IDurableEntityContext ctx)
=> ctx.DispatchAsync<MyDetector>();
}

关于c# - 是否可以创建一个可从 EventHub 中的多个事件触发的编排持久函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60135134/

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