Azure функционирует только максимально одновременно в то время - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть функция 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: enter image description here

Если я добавлю 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"
    }
  }
} 

Как вы можете видеть на скриншоте ниже, я использую план потребления: enter image description here


Ответ: Я получил следующую работу:

"serviceBus": {"maxConcurrentCalls": 3
}

1 Ответ

0 голосов
/ 18 декабря 2018

Ответ можно найти здесь: Добавить поддержку Singleton для функций, чтобы обеспечить одновременную работу только одной функции

  1. Если вы работаете в плане потребления:убедитесь, что вы не масштабируете более одного экземпляра, установите настройку этого приложения:
    • WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT = 1
  2. Разрешить только Xодновременных вызовов в этом случае вы можете указать этот параметр в файле host.json:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...