Проверка текущих обработчиков ребуса и остановка приема новых сообщений ребусом

У меня есть веб-приложение, которое использует Rebus с очередями служебной шины Azure в качестве транспорта. Он сконфигурирован с контейнером Simple Injector.

Во время удаления приложения я хочу, чтобы ребус не принимал новые сообщения, и проверял количество сообщений, обрабатываемых в данный момент. Затем я могу решить подождать несколько секунд, чтобы обработчик завершил работу.

Это достижимо?

РЕДАКТИРОВАТЬ: Я знаю о существовании методов SetWorkerShutdownTimeout и Advanced.Workers.SetNumberOfWorkers. Могу ли я достичь своей цели, вызвав Advanced.Workers.SetNumberOfWorkers (0)?


person Gregi    schedule 08.12.2017    source источник


Ответы (1)


Затем я могу решить подождать несколько секунд, чтобы обработчик завершил работу.

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

После запуска процесса выключения никаких новых сообщений не будет.

Могу ли я достичь своей цели, вызвав Advanced.Workers.SetNumberOfWorkers (0)?

Да :) если позвонишь

bus.Advanced.Workers.SetNumberOfWorkers(0);

рабочие потоки будут удалены, что приведет к прекращению приема сообщений.

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

person mookid8000    schedule 08.12.2017