首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在本地使用azure服务总线时,MaxConcurrentCalls =0仍具有工作线程

在本地使用azure服务总线时,MaxConcurrentCalls =0仍具有工作线程
EN

Stack Overflow用户
提问于 2019-01-08 18:09:11
回答 1查看 1.4K关注 0票数 1

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

最初我的host.json是空的,我找到了下面的代码,为了只有一个线程执行,我找到了下面的代码,请参阅https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#host-json

代码语言:javascript
复制
{
  "version": "2.0",
  "extensions": {
      "serviceBus": {
          "prefetchCount": 100,
          "messageHandlerOptions": {
          "autoComplete": false,
          "maxConcurrentCalls": 1,
          "maxAutoRenewDuration": "00:55:00"
         }
       }
     }
 }

我将host.json设置添加到我的local.json设置中,但没有用,启动时仍有10个工作线程启动。我还试图让函数调用一个单独的see Make Azure Function run sequential on ServiceBusTrigger - maxConcurrentCalls not working,然而,这只是完全锁定了函数,根本没有解决任何问题。

代码语言:javascript
复制
   [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个线程,因为最大并发调用数。我是不是遗漏了什么?一次并发提取一条消息和跨多个线程执行函数之间有区别吗?

EN

回答 1

Stack Overflow用户

发布于 2019-01-08 19:57:29

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54089474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档