持久功能:从Orchestrator返回结果

时间:2017-11-18 20:47:28

标签: azure azure-functions

我有一个与持久性函数序列示例非常吻合的用例:通过三个函数推送json有效负载,每个函数修改json图并将其转发到下一个函数。

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

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

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

1 个答案:

答案 0 :(得分:2)

这当然可行。您可以从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
}

从代码中可以看出,您遇到的问题是处理错误情况。例如,如果业务流程失败,您的功能会怎样做?那么,如果需要很长时间才能完成呢?这些是你当然可以弄明白的东西,但是你想要采取防御措施来处理这些案件。