Я новичок в NServiceBus, так что, может быть, я спрашиваю здесь кое-что довольно глупое, но есть ли способ заставить NServiceBus не прекращать отправку сообщений, отправляемых в ответ на сообщение, обработчик которого не работает?
Позвольте мне объяснить на простом примере.
Предположим, у меня есть OrderPaidEvent
, у которого есть обработчик, который выполняет следующее:
- Ищите клиента
- Запустите транзакцию БД
- Обновите клиента до хорошего клиента
- Отправьте
CustomerUpgradedToGoodCustomerEvent
сообщение - Передайте транзакцию БД
Справедливовсе просто в мире.Теперь, спустя несколько месяцев, кто-то еще полагает, что электронное письмо было бы хорошо, когда заказ оплачен, и, таким образом, добавляет к обработчику OrderPaidEvent
еще один обработчик для отправки электронного письма.
К сожалению, теперь, когда у почтового сервера возникает проблема,этот второй обработчик завершится с ошибкой, которая, однако, предотвратит отправку исходного сообщения CustomerUpgradedToGoodCustomerEvent
(шаг 4).Но поскольку транзакция БД уже была зафиксирована (шаг 5), клиент уже был преобразован в хорошего клиента в базе данных.
Это означает, что даже если обработчик OrderPaidEvent
будет повторен, клиент больше не изменяется итаким образом сообщение CustomerUpgradedToGoodCustomerEvent
никогда не отправляется.Что еще хуже, это все из-за изменения в коде, которое не имеет ничего общего с исходным обработчиком сообщений и, следовательно, его будет трудно обнаружить.
Это кажется огромным недостатком, и так как я новичок вЯ уверен, что я что-то не так делаю, но я не могу понять, что это такое.
Любая помощь от вас, прекрасные люди, была бы великолепна.
Спасибо завперед.