我的工作者角色的运行方法是:
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时,您可能希望显式地设置更高的"可见性超时"值。确保你的睡眠时间不会超过可见性超时。