Невозможно сделать непрерывную веб-работу Azure одиночной

У меня есть веб-задание Azure, которое читает из очереди служебной шины. Моя цель - синхронно обрабатывать 1 сообщение из очереди. Это возможно?

Я заметил, что если в очереди 100 сообщений, я вижу 10-20 экземпляров веб-задания, выполняющихся одновременно, каждый из которых обрабатывает разные сообщения из очереди. Я хотел бы ограничить это 1 сообщением. Я пробовал следующее до сих пор:

  1. Я создал файл settings.job со свойством {"is_singleton": true}.
  2. Я также попытался использовать атрибут [Singleton] поверх сигнатуры функции.
  3. Я попытался установить свойства config.Queues.BatchSize = 1 и config.Queues.NewBatchThreshold = 1.

Вот подпись моей функции webjob:

[ServiceBusAccount("servicebusconnstr")]
public static void MigrateDoc([ServiceBusTrigger("myqueue")] string queueItem, TextWriter log)
{
...
}

Ни один из этих методов не работает.

1 ответ

Догадаться. Мне нужны следующие параметры: ServiceBusConfiguration.MessageOptions.MaxConcurrentCalls = 1. Это можно сделать так:

var config = new JobHostConfiguration();
var serviceBusConfig = new ServiceBusConfiguration();
serviceBusConfig.MessageOptions.MaxConcurrentCalls = 1;

if (config.IsDevelopment)
{
     config.UseDevelopmentSettings();
}

config.UseServiceBus(serviceBusConfig);

var host = new JobHost(config);
host.RunAndBlock();

Благодаря этому сообщению: параллелизм Azure WebJob при использовании ServiceBusTrigger для примера.

Другие вопросы по тегам