Azure功能当时最多只能并发

时间:2018-12-16 21:24:01

标签: c# azure azure-functions azure-servicebus-queues azure-webjobssdk

我有一个处理SharePoint操作的Azure函数。由于节流,我只希望同时运行10个并发函数,并且始终希望同时运行10个函数。我正在考虑将函数与Azure Service Bus队列一起使用。 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());

}

功能应用设置: 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
  }

1 个答案:

答案 0 :(得分:1)

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

  1. 如果您正在使用消费计划:为了确保不会扩展到多个实例,请设置以下应用程序设置:
    • // will parse correctly data-nations='["anothernation", "nationman", "country"]' // will NOT parse correctly since it will be treated as plain text data-nations="['anothernation', 'nationman', 'country']" = WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
  2. 要在这种情况下仅允许X个并发调用,可以在1文件中指定此设置:

    host.json