gpt4 book ai didi

c# - MaxConcurrentCalls = 0 但在本地使用 azure 服务总线时仍然有工作线程

转载 作者:行者123 更新时间:2023-12-03 01:40:33 32 4
gpt4 key购买 nike

我设置了一个 azure 服务总线队列。在 host.json 文件中,我将 maxConcurrentCalls 设置为 1,但是当我在本地调试应用程序时,有 8-10 个工作线程正在运行,这使得应用程序无法调试。当我在本地调试我的应用程序时,如何只运行 1 个线程?

最初我的 host.json 是空的,我发现下面的代码应该只有 1 个线程执行,请参阅 https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#host-json

{
"version": "2.0",
"extensions": {
"serviceBus": {
"prefetchCount": 100,
"messageHandlerOptions": {
"autoComplete": false,
"maxConcurrentCalls": 1,
"maxAutoRenewDuration": "00:55:00"
}
}
}
}

我将 host.json 设置添加到 local.json 设置中,但没有效果,我仍然在启动时启动 10 个工作线程。我还尝试使函数调用成为单例 Make Azure Function run sequential on ServiceBusTrigger - maxConcurrentCalls not working然而,这只是完全锁定了功能,根本没有解决任何问题。

   [FunctionName("ReadFromXCagoIssueQueueAndRetrieveFiles")]
public static void Run([ServiceBusTrigger(QueueName, AccessRights.Manage, Connection = "SBConnection")]BrokeredMessage myQueueItem, TextWriter log)
{
log.WriteLine($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
var propIssueId = myQueueItem.Properties["IssueId"].ToString();
var issueId = int.Parse(propIssueId);
log.WriteLine($"begin grab files for issue: {issueId}");
retrieveIssueEPub(issueId);
}

retrieveIssueEPub 的执行是在多个工作线程上执行的,这意味着该消息在运行 1 次该函数后最终会进入死信队列,因为它将相同的消息拆分到所有线程,而不是我期望的 1 个线程最大并发调用数。我错过了什么吗?一次同时提取 1 条消息和在多个线程上执行该函数有区别吗?

最佳答案

我的一位同事发现了这个错误。应用程序一次仅触发一个线程。然而,在 azure 本身上,锁定持续时间设置为 30 秒。这意味着应用程序将在 30 秒等后启动新线程,因为消息已解锁。延长锁就解决了这个问题。

关于c# - MaxConcurrentCalls = 0 但在本地使用 azure 服务总线时仍然有工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54089474/

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