我有一个监视队列的辅助角色。尽管我希望它被抨击,但大多数时候队列都是空的。我每隔几分钟就会在队列中得到一个新项目。
我有:
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费用。
答案 0 :(得分:7)
有助于最大限度地减少交易费用的一种好方法(我认为您主要关注的是)将采用退避轮询方法。意思是,每次没有找到队列消息时,慢慢增加睡眠时间。这样做直到睡眠时间达到某个最大值。找到消息后,开始更快地轮询消息。
另一种帮助方法是一次从队列中获取多条消息(而不是一次获取一条消息)。这也有助于交易费用。
答案 1 :(得分:2)
答案 2 :(得分:1)
我还建议您检查邮件中的DequeueCount,以避免对中毒邮件进行不必要的处理/收费。 例如,记录和删除超出set dequeue计数的消息,而不是在您的消息循环中的任何sleepperiod上旋转。