Обработка заданий очистки с помощью очередей хранилища Azure

Для обработки заданий очистки, которые будут выполняться каждые 8 ​​часов, в настоящее время мы реализовали следующее:

  1. Создайте запланированное задание с помощью планировщика Azure, который помещает сообщение в очередь хранилища при его запуске.
  2. Реализуйте клиент таким образом, чтобы он постоянно опрашивал и обрабатывал каждый раз, когда получает сообщение. Пример реализации клиента:

     while (!CancellationToken.Value.IsCancellationRequested)    
            {
    
             var message = await client.GetMessageAsync();
    
                if (message != null)
                {
                    // process the message
                }
    }
    

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

Как оптимизировать это таким образом, чтобы слушатели создавались на лету в любое настраиваемое время вместо непрерывного цикла?


person P V M Raghunandan potti    schedule 20.07.2015    source источник
comment
Почему у тебя нет запланированной работы по уборке? См. запланированные веб-задания.   -  person mert    schedule 22.07.2015


Ответы (1)


Вы не упомянули, как развернут ваш клиент, поэтому я надеюсь, что одна из приведенных ниже стратегий поможет вам оптимизировать его. Если ваш клиент развернут как облачный ресурс: вы можете использовать службу автоматизации Azure для планирования запуска/остановки облачного ресурса, например: запускайте облачную службу непосредственно перед появлением сообщения в очереди и инициируйте завершение работы после его завершения.

Если ваш клиент развернут в помещении: вы, конечно, можете использовать Thread.Sleep, чтобы уменьшить количество обращений.

Также рассмотрите служебную шину Azure, которая позволяет вам подписываться на сообщения/темы.

person Sri Kanth    schedule 20.07.2015
comment
Спасибо за ответ. Клиент развернут как облачный ресурс. Служебную шину Azure нельзя использовать, так как эту стратегию можно использовать в качестве резерва, если служебная шина недоступна. Также нельзя использовать автоматизацию, потому что в одной и той же облачной службе размещаются разные задания, которые будут создавать разные прослушиватели, из которых лишь немногие являются фоновыми, и мы не должны ждать бесконечно. - person P V M Raghunandan potti; 21.07.2015
comment
ХОРОШО. вы также можете попробовать преобразовать составную облачную службу, выполняющую разные задания, в несколько независимых микрослужб, которые впоследствии можно будет развертывать и планировать независимо друг от друга с помощью веб-заданий/автоматизации/веб-API. - person Sri Kanth; 22.07.2015
comment
Микросервисы использовать нельзя, так как реализация Service Fabric очень далека от нашей задачи. - person P V M Raghunandan potti; 24.07.2015