3

我的worker角色的run方法是:

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(两个工人)。是否可以?

是否存在一种仅允许工作人员以“互斥”方式读取消息的方式?

4

1 回答 1

1

您的“getAMessage(queue)”方法是如何定义的?如果您执行PeekMessage(),则所有工作人员都可以看到一条消息。如果您执行GetMessage(),则该消息将仅由首先获得它的工作人员获得。但是对于指定或默认(30 秒)的隐形超时。您必须在隐身超时到来之前删除该消息。

查看队列服务 API了解更多信息。我确信你的代码有问题。我使用队列,它们的行为与开发存储和生产存储中的文档一样。当您执行GetMessage时,您可能希望显式设置更高的Visibility Timeout值。并确保您的睡眠时间不超过能见度超时。

于 2012-02-03T12:19:28.740 回答