我的工作角色需要睡眠时间吗?

时间:2012-01-23 16:17:55

标签: azure azure-storage azure-worker-roles

我有一个监视队列的辅助角色。尽管我希望它被抨击,但大多数时候队列都是空的。我每隔几分钟就会在队列中得到一个新项目。

我有:

 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 个答案:

答案 0 :(得分:7)

有助于最大限度地减少交易费用的一种好方法(我认为您主要关注的是)将采用退避轮询方法。意思是,每次没有找到队列消息时,慢慢增加睡眠时间。这样做直到睡眠时间达到某个最大值。找到消息后,开始更快地轮询消息。

另一种帮助方法是一次从队列中获取多条消息(而不是一次获取一条消息)。这也有助于交易费用。

答案 1 :(得分:2)

答案 2 :(得分:1)

我还建议您检查邮件中的DequeueCount,以避免对中毒邮件进行不必要的处理/收费。 例如,记录和删除超出set dequeue计数的消息,而不是在您的消息循环中的任何sleepperiod上旋转。