Я понимаю, что это неправильно, любые пояснения были бы полезны.
Я думал, что добавление [Singleton] к веб-заданию заставит его запускаться одно за другим.Похоже, что это не так.
Это мой очень простой тестовый код (для очереди с примерно 149 сообщениями)
[Singleton] //just run one at a time
public static void ProcessQueueMessage([QueueTrigger("datatrac-stops-to-update")] string message, TextWriter log)
{
monitorEntities mDb = new monitorEntities();
//go get the record
int recordToGet = Convert.ToInt32(message);
var record = (from r in mDb.To_Process where r.Id == recordToGet select r).FirstOrDefault();
record.status = 5;
mDb.SaveChanges();
Console.WriteLine($"Finished record {message}");
}
Когда он запускается, я получаю это на консоли:
и по мере того, как я делаю это, я получаю конфликтные ошибки.
Что я не понимаю?
РАЗРЕШЕНО -ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Вот что я сделал для решения этой проблемы, как сказал Хайтам в своем ответе [Синглтон] относится к тому, сколько экземпляров самого веб-задания выполняется, а не сколько элементов обрабатывается в каждом экземпляре..
Это было решено путем изменения моего Main, например:
static void Main(string[] args)
{
var config = new JobHostConfiguration();
config.Queues.BatchSize = 2;
, который при значении 1 работал только по 1 за раз.Если установлено значение 2, как указано выше, то измените следующий код:
public static void ProcessQueueMessage([QueueTrigger("datatrac-stops-to-update")] string message, TextWriter log)
{
var threadID = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine($"{threadID} : started record {message}");
Создает это поведение (что и ожидалось):
Ссылка, где янашел документацию по выше:
https://github.com/Azure/azure-webjobs-sdk/wiki/Queues#config