синглтон в лазурном очереди не работает должным образом - PullRequest
0 голосов
/ 23 февраля 2019

Я понимаю, что это неправильно, любые пояснения были бы полезны.

Я думал, что добавление [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}");
    }

Когда он запускается, я получаю это на консоли:enter image description here

и по мере того, как я делаю это, я получаю конфликтные ошибки.

Что я не понимаю?

РАЗРЕШЕНО -ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Вот что я сделал для решения этой проблемы, как сказал Хайтам в своем ответе [Синглтон] относится к тому, сколько экземпляров самого веб-задания выполняется, а не сколько элементов обрабатывается в каждом экземпляре..

Это было решено путем изменения моего 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}");

Создает это поведение (что и ожидалось): enter image description here

Ссылка, где янашел документацию по выше:

https://github.com/Azure/azure-webjobs-sdk/wiki/Queues#config

1 Ответ

0 голосов
/ 24 февраля 2019

Синглтон не означает, что он будет запускать его один за другим, а главным образом об экземпляре экземпляра для класса веб-заданий.

Если вам нужно запускать только по одному за раз, вы можете использовать блокировки на статическомпеременная для предотвращения выполнения кода более одного раза.Но я бы не советовал так или иначе, и вы должны понять, почему возникают конфликтные ошибки

...