0

[Отредактировано для печати]Должны ли обработчики 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().

спасибо.

+0

И в то же время было бы хорошо иметь официальный ответ о причинах, по которым Сага должна быстро реагировать и не иметь в ней бизнес-логики. Или просто указатель на самый современный официальный ответ на этот вопрос. – pashute

ответ

1

@pashute, ваши заявления о Сагах верны, не должны работать (I/O) и должны выступать в качестве хореографов для длительных бизнес-процессов.

Обработчики должны следовать за SRP Single Responsibility Principle, и это должно все еще держать их в покое, даже если они интенсивно работают в режиме ввода-вывода. В случае интенсивных операций ввода/вывода распределитель/балансировщик нагрузки поможет уменьшить нагрузку.

Это имеет смысл?

1

Внутри саги все должно быть кратким и быстрым.

Это утверждение ничего не значит. Что вы подразумеваете под лаконичным? Что вы подразумеваете под этим? Сага будет работать так же быстро, как это возможно, в пределах контуров контейнера, на котором он работает.

В случае, если обработчики сообщений NServiceBus вне саги всегда полный быстро, и если есть трудоемкая пропуск действий, на к нити и полной?

Если вы не создали свой обработчик таким образом, нет. Если процесс передачи сообщений занимает много времени, нет процесса, кроме экземпляра обработчика, который обрабатывает сообщение.

Или это лучше «боры» обработчик, и этак NServiceBus «знает», что это сообщение используется с тяжелым бременем, и может принимать соответствующие меры - то есть с автоматической балансировкой нагрузки?

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

Вы должны делать все возможное, так что нет никакого дела логика внутри Saga ..... Вы должны быть «успех ориентированной» делать, как много валидаций как это возможно, до Saga, так что как только вы входите в Сагу вы ждете, чтобы добиться успеха

Да, сказания должны касаться только оркестровки длинного запущенного процесса, а не деталь этого.

В свете вышеизложенного я хотел бы изменить свой ответ на один из ваших оригинальных вопросов:

В случае, если обработчики сообщений NServiceBus вне саги всегда полный быстро, и если есть много времени действия прохода что на нить и комплект?

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

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

+0

@pashute благодарит за ваш комментарий. Теперь ваш вопрос действительно имеет больше смысла, я знаю, откуда вы. Я обновил свой ответ. –

+0

Я отредактировал вопрос вместо двух комментариев. На самом деле это основная часть моего вопроса, и, похоже, я вообще не прояснял. Это единственный вопрос. На мой пост нет двух вопросов, только один (с двумя вариантами). Нам говорят, чтобы сделать Сагас «средним и худым» и что они не должны занимать много времени по разным причинам. Но, с другой стороны, в саге нам ничего не сказано. Я ожидаю, что эксперт NSB ответит. Я спрашиваю, какой способ рекомендован персоналом Particular.Net. И почему. – pashute

+0

Надеюсь получить ответ от ребят NSB на следующей неделе. – pashute