Невозможно сделать непрерывную веб-работу Azure одиночной
У меня есть веб-задание Azure, которое читает из очереди служебной шины. Моя цель - синхронно обрабатывать 1 сообщение из очереди. Это возможно?
Я заметил, что если в очереди 100 сообщений, я вижу 10-20 экземпляров веб-задания, выполняющихся одновременно, каждый из которых обрабатывает разные сообщения из очереди. Я хотел бы ограничить это 1 сообщением. Я пробовал следующее до сих пор:
- Я создал файл settings.job со свойством {"is_singleton": true}.
- Я также попытался использовать атрибут [Singleton] поверх сигнатуры функции.
- Я попытался установить свойства 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 для примера.