2016-03-08 2 views
0

Я использую WebJob, чтобы вытащить из своей очереди ServiceBus через триггерный метод и, похоже, работает хорошо. Проблема в том, что у меня есть ночная работа, которая работает в очереди, тогда я бы хотел, чтобы в конце работа выполнялась, когда работа над очередью была окончательно обработана, чтобы отправить результаты по электронной почте. Мой WebJob в настоящее время обрабатывает 16 элементов за раз, и мне, вероятно, придется иметь несколько WebJobs, работающих для обработки нагрузки, поэтому я не чувствую, что могу просто проверить, нет ли очереди на каждом триггере.Как определить, когда очередь ServiceBus пуста?

Есть ли способ, с помощью которого ServiceBus может сигнализировать, когда он пуст? Должен ли я иметь еще один повторяющийся процесс, который проверяет каждые 10 минут и срабатывает с ежедневным значением бита, чтобы убедиться, что это сделано? Кажется неэффективным. Есть ли какой-то шаблон Azure, который я здесь отсутствует?

ответ

0

Не проверять очередь пуста или нет. Когда появится новое сообщение в очереди OnMessage или OnMessageAsync событие будет запущено. Вы должны использовать эти события для потребления.

Вы можете проверить Competing Consumers Pattern

+0

Автор вопроса хотел знать, как определить сценарий, в котором очередь была опорожнена потребителями, чтобы он мог создать новое событие «Job done» или просто обнаружить и обработать случай. OnMessageAsync не помогает ему, поскольку, конечно, он не будет вызываться, когда очередь опустошается. – Shrulik

1

Azure Service Bus не будет сигнализировать о пустых очередях. Зная, есть ли количество сообщений в очереди, вероятно, считается анти-шаблоном. Как Clemens Vasters said

В любое время любой клиентский код #Azure #ServiceBus смотрит на QueueDescription.MessageCount, чтобы определить, можно ли назвать Receive - это ошибка. Не следует

Очередь может содержать рабочие элементы в любой момент времени. Вы никогда не знаете, когда это закончится. Если у вас есть сообщения, которые представляют что-то в качестве группы, и вам нужно вызвать операцию в конце этой групповой обработки, вы можете получить что-то, что может отслеживать, какая работа была выполнена, и когда все это сделано, вызвать другое сообщение. Это может быть «Я обработал X-сообщения для сеанса Y, и поэтому эта работа завершена, отправив команду уведомления».

Смежные вопросы