Рабочий Azure. Чтение сообщения из очереди Azure мьютексным способом - PullRequest
3 голосов
/ 03 февраля 2012

Метод запуска моей рабочей роли:

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 (оба рабочих).Является ли это возможным?

Существует ли способ, позволяющий просто работнику читать сообщение мьютексом?

1 Ответ

1 голос
/ 03 февраля 2012

Как определяется ваш метод getAMessage (queue)?Если вы выполните PeekMessage () , сообщение будет видно всем работникам.Если вы выполните GetMessage () , сообщение будет получено только рабочим, который первым получит его.Но для тайм-аута невидимости либо указано, либо по умолчанию (30 сек.).Вы должны удалить сообщение до истечения времени ожидания невидимости.

Обратитесь к API службы очередей для получения дополнительной информации.Я уверен, что в вашем коде что-то не так.Я использую очереди, и они ведут себя как при документировании в dev-хранилище и в производственном хранилище.Вы можете явно указать более высокое значение Visibility Timeout при выполнении GetMessage .И убедитесь, что вы не спите дольше времени ожидания видимости.

...