У меня есть функция Azure, которая обрабатывает операции SharePoint.Из-за регулирования я хочу, чтобы одновременно выполнялось только 10 одновременных функций и всегда 10 функций одновременно.Я рассматривал возможность использования функций с очередью служебной шины Azure.Есть ли какая-либо сборка на платформе Azure для достижения этой цели?Служебная шина не является обязательным требованием, поэтому если для этого лучше использовать другие концентраторы или очереди.Я посмотрел в пользовательском интерфейсе Azure и не нашел ничего со стороны служебной шины или функции.
Тест и наблюдения:
Я создал тест безуспешно.Я создал и развернул функции, которые спят в течение 20 секунд, а затем записывают документ в базу данных Cosmos:
[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:
Если я добавлю 10 сообщений в очередь, 10 документов будут добавлены в базу данных одновременно.Я ожидал бы, что только 3 в будут добавлены с задержкой на 20 секунд.Установка WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT в настройках приложения, похоже, не работает.Какие-либо предложения?
Я также попробовал maxConcurrentCalls в файле host.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsServiceBus": "xxx",
"AzureWebJobsStorage": "xx",
"AzureWebJobsDashboard": "xx"
},
"version": "2.0",
"extensions": {
"serviceBus": {
"maxConcurrentCalls": "3"
}
}
}
Как вы можете видеть на скриншоте ниже, я использую план потребления:
Ответ: Я получил следующую работу:
"serviceBus": {"maxConcurrentCalls": 3
}