【发布时间】:2018-07-23 23:51:03
【问题描述】:
我有以下场景:
我必须执行一个函数来检索 N(N 介于 0 和无限之间)记录。我必须调用一个映射函数来将记录转换为其他内容并将它们向前移动(通过 http、服务总线、cosmos db 等)
由于 10 分钟的限制,我无法使用常规 Azure 函数,因此我正在寻找 Durable Functions 是否可以解决我的问题。
我的想法如下:
1 - 当持久函数触发时,它会从数据库中流式传输记录。
2 - 对于每条记录,它调用映射函数。
3 - 映射后,它通过服务总线将记录发送到消息。
作为概念证明,我做了下面的例子。我模拟在持久功能中接收 1000 条消息,但它的行为非常不可靠。如果我发送 1000 条消息,函数有点崩溃或需要很长时间才能完成,我希望这段代码几乎立即完成。
#r "Microsoft.Azure.WebJobs.Extensions.DurableTask"
public static async Task<List<string>> Run(DurableOrchestrationContext context, TraceWriter log)
{
var outputs = new List<string>();
var tasks = new List<Task<string>>();
for(int i = 0; i < 1000; i++)
{
log.Info(i.ToString());
tasks.Add(context.CallActivityAsync<string>("Hello", i.ToString()));
}
outputs.AddRange(await Task.WhenAll(tasks.ToArray()));
return outputs;
}
我的问题是:Durable Functions 是否适合这种情况? 我应该研究一些非无服务函数方法来从数据库中提取数据吗?
有没有办法从一个持久函数中同步调用另一个 Azure 函数?
【问题讨论】:
标签: azure-functions azure-durable-functions