2014-12-24 3 views
2

Я использую QueueDescription.MessageCount, чтобы получить количество сообщений, оставшихся в одной из моих очередей, когда он показывает положительное число, но я не могу получить никаких сообщений.Очередь очереди обслуживания Azure, сообщения застряли или неправильное количество сообщений?

Я проверил активную и мертвую очередь, но получить нечего. Я пытался использовать Recieve(); RecieveBatch(); onMessage(); - Все равно.

Кто-нибудь еще видел это? Являются ли сообщения застрявшими или неверны.

Thanks

Steve.

+0

Отметьте это сообщение, поскольку у меня были такие же проблемы: http://stackoverflow.com/questions/25762485/ лазурь-сервис-шинные очереди сообщений-есть-застревают – jglassco

ответ

1

Единственная причина, по которой я могу думать, это если у вас есть received() сообщение, но он не вызвал complete() или abandon(). В этом случае сообщение «скрыто» в течение определенного периода времени (по умолчанию 30 секунд). За это время ваше сообщение будет положительным, даже если вы не можете получать сообщения.

По истечении 30 секунд (по умолчанию) сообщения становятся видимыми, и вы можете снова добавить . Обратите внимание, что свойство .DeliveryCount увеличивается каждый раз, когда вы получаете сообщение до тех пор, пока оно не достигнет 10 (по умолчанию), и сообщение будет сброшено в подпункт «мертвая буква».

Обязательно всегда звоните complete() по любому сообщению, которое вы обработали. Вызовите abandon(), если вы хотите, чтобы он был немедленно доступен в очереди для обработки другого рабочего. Также проверьте свойство DeliveryCount, чтобы убедиться, что вы не обрабатываете сообщение дважды. (Это может произойти, если вы долго обрабатываете сообщение перед вызовом complete(), и к тому времени блокировка была освобождена.)