单个Azure Function应用中的多个业务流程函数

2fjabf4q  于 2023-03-31  发布在  其他
关注(0)|答案(1)|浏览(82)

我使用Fan-out/fan-in模式创建了Azure持久编排函数,以并发执行多个函数,然后对结果执行一些聚合,如下所述。

  1. StarterFunc (TimerTrigger Starter)函数调用OrchestrationOne函数。
  2. OrchestrationOne (OrchestrationTrigger)是一个协调器函数,它调用活动函数(即ActivityOne)以获取某个字符串数组。
    1.对于ActivityOne函数返回的每个字符串,编排器使用await Task.WhenAll(tasks)以相关方式调用另一个称为ActivityTwo的函数;
    代码如下所示:
[FunctionName("StarterFunc")]
    public static async Task RunScheduled(
        [TimerTrigger("%Starter%")] TimerInfo timerInfo,
        [DurableClient] IDurableClient starter,
        ILogger log)
    {
        var instanceId = await starter.StartNewAsync(FuncConstants.OrchestrationDirectToStoreWac, null);
        log.LogInformation($"[{DateTime.UtcNow}] - Started orchestration with ID = '{instanceId}'.");
    }

    [FunctionName("OrchestrationOne")]
    public async Task Run([OrchestrationTrigger] IDurableOrchestrationContext context, ILogger log)
    {
        // Get all the Strings to be Processed.
        var sList = await context.CallActivityAsync<List<string>>("ActivityOne", null);
        if (sList.Count > 0)
        {
            // Process each String in Parallel
            var parallelTasks = new List<Task<string>>();
            foreach (var s in sList)
            {
                var task = context.CallActivityAsync<string>("ActivityTwo", s);
                parallelTasks.Add(task);
            }

            // Wait for all results to come back
            await Task.WhenAll(parallelTasks);
        }
        else
        {
            //log.LogError
        }
    }

我想了解,是否有可能或更好的方法来调用多个Orchestrator函数使用单一启动器函数?或通过单一Azure函数应用程序内的多个启动器函数?
例如:

  • 入门级-〉协调级
  • Starter 2-〉Orchestrator 2
oknwwptz

oknwwptz1#

是的,您的计时器触发器可以启动任意多个编排器。启动编排器主要包括两件事:
1.向示例表中添加行
1.向控制队列发送消息
你的定时器触发器本质上只是做这些事情几次;这是没有问题的。唯一可能的问题是达到了计时器触发器的执行时间限制(默认为5分钟),但您必须启动 * 很多 * 编排器才能实现这一点。请记住,计时器不会等待编排器完成,它只是添加该行并发送消息。

相关问题