Как определить, все ли сообщения в очереди Azure обработаны? - PullRequest
3 голосов
/ 30 октября 2011

Я только начал возиться с Windows Azure и буду признателен за помощь в вопросе.

Как определить, пуста ли очередь Windows Azure и обработаны ли все рабочие элементы в ней?Если у меня несколько рабочих процессов, запрашивающих очередь рабочего элемента, GetMessage (s) не возвращает сообщений, если очередь пуста.Но нет никакой гарантии, что в настоящее время невидимое сообщение не будет отправлено обратно в очередь.

Мне нужна эта функциональность, поскольку последующее поведение моего рабочего процесса зависит от завершения всех рабочих элементов в этой конкретной очереди.Возможный способ решения этой проблемы - подсчитать количество путов и удалений.Но для этого снова потребуется синхронизация на уровне общего хранилища, и я хотел бы избежать ее, если это возможно.

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 30 октября 2011

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

Майк Вуд писал об этой тонкости вместе с краткой информацией о методе Clear очереди, здесь .

Тем не менее, вы можете выбрать другой механизм управления рабочим процессом.Может быть, строка таблицы, где ваш ключ строки равен некоторому идентификатору перехода элемента из нескольких очередей, а отдельные свойства являются флагами состояния.Это позволяет отслеживать сбойные части транзакции (скажем, 9 из 10 элементов очереди обрабатываются нормально, 10-й сбой; вы все равно можете удалить 10-й элемент очереди, но установите для его флага состояния значение «Сбой», что позволит вам разобраться с этим сценарием.соответственно).Также: предположим, что вы используете ту же очередь для обработки другой «транзакции» (это означает, что очередь снова имеет ненулевую длину).Используя отдельный объект, такой как строка таблицы, вы все равно можете определить, что ваша «транзакция» завершена, даже если есть дополнительные сообщения очереди.

0 голосов
/ 18 февраля 2012

Лучший способ - создать другую очередь, назвать ее очередью индикатора завершения и поместить сообщение в эту очередь для каждого сообщения вашего процесса из основной очереди.Так делается и в исследовательских проектах.Проверьте это http://www.cs.gsu.edu/dimos/content/gis-vector-data-overlay-processing-azure-platform.html

...