Azure 函数当时只有最大并发

Tho*_*ato 2 c# azure azure-servicebus-queues azure-webjobssdk azure-functions

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

}
Run Code Online (Sandbox Code Playgroud)

功能 app.settings: 在此处输入图片说明

如果我向队列中添加 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"
    }
  }
} 
Run Code Online (Sandbox Code Playgroud)

正如您在下面的屏幕截图中看到的,我使用了消费计划: 在此处输入图片说明


答:我得到了以下工作:

"serviceBus": { "maxConcurrentCalls": 3
}

Tho*_*mas 5

可以在此处找到答案:为函数添加单例支持以确保一次仅运行一个函数

  1. 如果您正在使用消耗计划:为确保您不会扩展到多个实例,请设置以下应用设置:
    • WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT = 1
  2. 要在此实例中仅允许 X 个并发调用,您可以在host.json文件中指定此设置:

    { "version": "2.0", "extensions": { "serviceBus": { "maxConcurrentCalls": 1 } } }