Обработка исключений Nservicebus - PullRequest
0 голосов
/ 20 октября 2011

Мы используем NServiceBus для обработки нескольких типов сообщений. На nservicebus.com говорят, что мы не должны обрабатывать исключения, поскольку NServiceBus позаботится об этом. Теперь наша проблема заключается в следующем: если у нас есть два обработчика сообщений, каждый из которых обрабатывает один и тот же тип сообщения, и в одном из обработчиков есть исключение - можно ли разрешить NServiceBus обрабатывать это исключение (retry и log), но даже если попытки повторяются мы все еще хотим, чтобы другой обработчик был запущен? Или это означает, что мы должны обработать исключение самих себя в обработчике номер один, чтобы быть уверенным, что обработчик номер два всегда запущен?

Спасибо

/ Christian

Пояснение:

Упрощенная версия нашего сценария: наша система обрабатывает счета, когда счет меняет статус, сообщение «InvoiceStatusChanged» отправляется на nservicebus, и должны произойти две вещи: сообщение должно быть отправлено в очередь, а электронное письмо должно быть отправлено человеку, который должен обработать счет следующий. Эти две вещи не зависят друг от друга.

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

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

Спасибо

/ Christian

1 Ответ

4 голосов
/ 20 октября 2011

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

...