gpt4 book ai didi

azure - 等待 azure function 持久编排完成

转载 作者:行者123 更新时间:2023-12-03 03:47:59 25 4
gpt4 key购买 nike

目前正在开发一个项目,我使用存储队列来获取要处理的项目。存储队列触发功能从队列中拾取项目并启动持久编排。通常,根据文档,存储队列会并行拾取 16 条消息(默认情况下)进行处理( https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue ),但由于编排刚刚开始(简单而快速的过程),以防万一我有很多消息在队列中,我最终会同时运行很多编排。我希望能够启动编排并等待其完成,然后再选取下一批消息进行处理,以避免系统过载。我想出的并且似乎有效的解决方案是:

public class QueueTrigger
{
[FunctionName(nameof(QueueTrigger))]
public async Task Run([QueueTrigger("queue-processing-test", Connection = "AzureWebJobsStorage")]Activity activity, [DurableClient] IDurableOrchestrationClient starter,
ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {activity.ActivityId}");
string instanceId = await starter.StartNewAsync<Activity>(nameof(ActivityProcessingOrchestrator), activity);

log.LogInformation($"Started orchestration with ID = '{instanceId}'.");

var status = await starter.GetStatusAsync(instanceId);
do
{
status = await starter.GetStatusAsync(instanceId);
} while (status.RuntimeStatus == OrchestrationRuntimeStatus.Running || status.RuntimeStatus == OrchestrationRuntimeStatus.Pending);
}

它基本上会获取消息,启动编排,然后在 do/while 循环中等待状态为“待处理”或“正在运行”。我在这里遗漏了一些东西还是有更好的方法来做到这一点(我在网上找不到太多)。预先感谢您的意见或建议!

最佳答案

这可能不起作用,因为您可能会遇到超时导致重复的编排运行,或者只是强制您的函数应用程序横向扩展,从而完全破坏了代码的目的。

相反,您可以依靠 concurrency throttles具有耐用功能。虽然队列触发器会将编排运行排队,但任何时候只有定义的最大值才会在函数的单个实例上运行。

这仍然会导致您的函数应用程序横向扩展,因此您在设置此限制时也必须考虑这一点,并且您还可以设置 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT应用程序设置来控制您运行的应用程序可以扩展到多少个实例。

关于azure - 等待 azure function 持久编排完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68385151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com