Должен ли я объявлять исключения в том же пакете в Axon?

#axon

Вопрос:

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

потому что я пишу Саги и транскрипции компенсаций и

например, когда экземпляр PaymentService приложения PaymentAggregates вызовет исключение NotEnoughMoneyException(если денег недостаточно), и OrderManagermentSaga(экземпляр саги об оркестровке) должен получать исключения из PaymentService, должны ли исключения относиться к тем же пакетам?

Я слишком много говорил о том, что «Должны ли исключения, используемые в других приложениях, быть в одном и том же месте?»

Ответ №1:

Короткий ответ на это: «это зависит от обстоятельств». Однако позвольте мне также дать вам более подробное объяснение.

От чего это зависит, так это от того, как вы отвечаете на сценарии сбоев при обработке определенных сообщений. Вы пытаетесь сериализовать исключение и передать его по проводу? Или вы поймаете исключение и настроите его на что-то другое?

Первый шаг — это то, что раньше делал Аксон. Структура адаптировалась для включения любого исключения в a HandlerExecutionException в более поздних версиях. HandlerExecutionException (Существует версия, зависящая от команды и запроса), содержит так называемую details Object . Axon гарантирует, что этот объект сериализуется как часть HandlerExecutionException .

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

На самом деле я сделал запись о том, как вы можете заполнить эти подробные объекты. Если вам интересно, вы можете найти его здесь. Есть также другой пример, немного под другим углом (читайте: в нем не используется @ExceptionHandler аннотация), который вы можете найти здесь. И, наконец, хотя это довольно скудно, в Справочном руководстве также есть немного об этом.