[Отредактировано для печати]Должны ли обработчики NServiceBus всегда быстро завершаться?
Я не уверен, что правильно понимаю.
Внутри Saga все должно быть кратким и быстрым, в соответствии с этими поучительными сообщений:
- резюме Джонатан Оливер: blog.jonathanoliver.com/...
- UDI Даан изначальной: skillsmatter.com/skillscasts/ ...
- и некоторые более ранние сообщения
- lostechies.com/jimmybogard/2013/03/26/scaling-nservicebus-sagas
- docs.particular.net/nservicebus/architecture/principles
Это означает, что ваша сага не должна иметь никакой бизнес-логики и внутри нее нет инструкций if-else. Он должен быть только оркестром, и его следует планировать как «ориентированный на успех», то есть: как можно больше нужно было сделать валидацию, прежде чем вызвать сагу.
Но как насчет отдельных обработчиков (вы называете их «независимыми обработчиками»?), Тех обработчиков, которые не находятся в саге? Какое из них подходит для них:
a. Должны ли обработчики сообщений NServiceBus за пределами саги всегда выполняться быстро, и если есть время, затрачиваемое на выполнение действий, которое выполняется в потоке и завершается?
b. Или лучше «свирепствовать» с обработчиком, и таким образом NServiceBus «знает», что это сообщение используется с тяжелыми потерями и может действовать соответственно, то есть с автоматической балансировкой нагрузки, создать другой экземпляр процесса обработки на другой процесс или даже другая машина?
Каков правильный путь?
И можете ли вы предоставить образец кода вместе с ответом, вызвав метод Foo.DoTimeConsumingBar()
.
спасибо.
И в то же время было бы хорошо иметь официальный ответ о причинах, по которым Сага должна быстро реагировать и не иметь в ней бизнес-логики. Или просто указатель на самый современный официальный ответ на этот вопрос. – pashute