Azure功能当时仅最大并发

问题描述 投票:1回答:1

我有一个处理SharePoint操作的Azure功能。由于限制,我只想要当时运行10个并发函数,并且总是同时运行10个函数。我正在考虑使用Azure Service Bus Queue的功能。 Azure平台中是否有任何构建来实现此目的?服务总线不是必需的,因此如果其他集线器或队列更适合这种情况。我查看了Azure UI,并没有在服务总线端或功能上找到任何东西。

测试和观察:

我创建了一个没有成功的测试。我创建并部署了一个休眠20秒的函数,然后将文档写入Cosmos DB:

[FunctionName("SleepFunction")]
public static void Run([ServiceBusTrigger("provision", AccessRights.Manage, Connection = "AzureWebJobsServiceBus")]string myQueueItem, TraceWriter log)
{
    System.Threading.Thread.Sleep(20000);
    log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");

    string EndpointUrl = "https://kk-db-governance-engine.documents.azure.com:443/";
    string PrimaryKey = "xx";
    var docClient = new DocumentClient(new Uri(EndpointUrl), PrimaryKey);
    var result = docClient.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri("kk-governance", "test-function-concurrency"), new Run());

}

函数app.settings:enter image description here

如果我向队列添加10条消息,则会同时向数据库添加10个文档。我预计只会增加3秒,延迟20秒。在应用设置中设置WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT似乎似乎不起作用。有什么建议?


我还尝试了host.json文件中的maxConcurrentCalls:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsServiceBus": "xxx",
    "AzureWebJobsStorage": "xx",
    "AzureWebJobsDashboard": "xx"
  },
  "version": "2.0",
  "extensions": {
    "serviceBus": {
      "maxConcurrentCalls": "3"
    }
  }
} 

正如您在下面的截图中看到的,我使用消费计划:enter image description here


答:我有以下工作:

“serviceBus”:{“maxConcurrentCalls”:3 }

c# azure azure-functions azure-servicebus-queues azure-webjobssdk
1个回答
1
投票

答案可以在这里找到:Add Singleton support for Functions to ensure only one function running at a time

  1. 如果您正在使用消费计划:为确保您不会扩展到多个实例,请设置此应用设置: WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT = 1
  2. 要在此实例中仅允许X个并发调用,您可以在host.json文件中指定此设置: { "version": "2.0", "extensions": { "serviceBus": { "maxConcurrentCalls": 1 } } }
© www.soinside.com 2019 - 2024. All rights reserved.