耐用的功能:从Orchestrator返回结果

phi*_*hil 5 azure azure-functions

我有一个非常适合持久性功能序列示例的用例:通过三个函数推送json负载,每个函数都会修改json图并将其转发给下一个函数。

在序列示例中,通过向协调器发出查询来检索序列的结果。

在我的用例中,我想直接返回这三个函数的结果,本质上是作为第三个函数的响应。

有没有办法做到这一点?明智吗?

Chr*_*lum 3

这当然是可行的。您可以从 HTTP 触发器开始编排,并使用函数内的GetStatusAsync API 进行轮询并等待其完成。完成后,您可以从 HTTP 触发器返回结果。

也许是这样的:

public static async Task<JObject> Run(JObject input, DurableOrchestrationClient client)
{
    string instanceId = await client.StartAsync("MyOrchestration", input);
    for (int i = 0; i < 60; i++)
    {
        var status = await client.GetStatusAsync(instanceId);
        if (status?.RuntimeStatus == "Completed")
        {
            return (JObject)status.Output;
        }

        // handle other status conditions, like failure

        await Task.Delay(TimeSpan.FromSeconds(1));
    }

    // handle timeouts
}
Run Code Online (Sandbox Code Playgroud)

正如您从代码中看到的,您将遇到的问题是处理错误条件。例如,如果编排失败,你的函数会做什么?另外,如果需要很长时间才能完成怎么办?这些是您当然可以弄清楚的事情,但您需要防御性地编写代码来处理这些情况。