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

标签 c# azure azure-functions azure-durable-functions

我猜想有一个与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/

相关文章:

node.js - 为什么这个Azure时间触发功能不会失败?

powershell - 在VSCode中错误调试PowerShell Azure函数

c# - Simple Injector 和默认的 AccountContoller 依赖问题

c# - 并行写入Excel文件c#

azure - 如何从 Azure 数据工厂中的 CosmosDb 数据集查询文档属性

javascript - 尝试访问 Azure Postgres 灵活数据库时,对部署在 Azure 应用服务上的 Nodejs 服务器的请求超时

c# - 高效读取和剪切文件的方法

c# - 如何在任何用户计算机上找到桌面?

macos - Microsoft RDP for mac 没有恢复,每次最小化后都会重新连接新 session

azure - 与旧库相比,新库的 Cosmos DB 速度非常慢