Нужно ли мне время сна в моей рабочей роли? - PullRequest
1 голос
/ 23 января 2012

У меня есть рабочая роль, контролирующая очередь.Как бы мне ни хотелось, чтобы это было захлопнуто, большую часть времени эта очередь будет пустой.Я получаю новый элемент в очереди каждые пару минут.

У меня есть:

 public override void Run()
 {
     while (true)
     {
         //Check the queue for new messages
         //if there's a new message, do some stuff
     }
 }

Мой вопрос заключается в том, нужно ли мне выполнять Thread.Sleep (x), если нетнет элемента в очереди?Или я могу продолжать проверять это снова и снова?Если мне нужно спать, как долго я должен спать?(миллисекунды / секунды?)

Моя главная проблема - плата за Azure.

Ответы [ 3 ]

7 голосов
/ 23 января 2012

Хороший подход, помогающий минимизировать комиссионные за транзакции (что, я думаю, является вашей главной задачей), заключается в использовании метода опроса с отсрочкой.То есть медленно увеличивайте время ожидания каждый раз, когда не будет найдено сообщение очереди.Делайте так, пока время сна не достигнет некоторого максимального значения.Как только сообщение найдено, начинайте опрашивать сообщения быстрее.

Еще один способ помочь - это получить сразу несколько сообщений из очереди (вместо того, чтобы получать по одному).Это также поможет с платой за транзакцию.

2 голосов
1 голос
/ 24 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...