Azure Worker:以互斥方式从Azure队列读取消息



我的工作者角色的运行方法是:

public override void Run()
{
    Message msg=null;
    while (true)
    {
        msg = queue.GetMessage();
        if(msg!=null && msg.DequeueCount==1){
             //delete message
             ...
             //execute operations
             ...
        }
        else if(msg!=null && msg.DequeueCount>1){
             //delete message
             ...
        }
        else{
             int randomTime = ...
             Thread.Sleep(randomTime);                 
        }
    }
}

对于性能测试,我希望只有工人才能分析消息(我不考虑工人的故障问题)。

但根据我的测试,似乎两个工人可以收到相同的消息,并读取DequeueCount等于1(两个工人)。有可能吗?

是否存在只允许工作人员以"互斥"方式读取消息的方法?

"getAMessage(queue)"方法是如何定义的?如果执行PeekMessage(),则所有工作人员都可以看到一条消息。如果执行GetMessage(),则消息将仅由最先获取消息的工作程序获取。但对于指定或默认的不可见超时(30秒)。您必须在不可见超时到来之前删除消息。

有关详细信息,请查看队列服务API。我确信你的代码有问题。我使用队列,它们的行为就像开发存储和生产存储中的文档一样。在执行GetMessage时,您可能希望显式地设置更高的"可见性超时"值。确保你的睡眠时间不会超过可见性超时。

最新更新