首页 > 解决方案 > 我应该在 Axon 的同一个包中声明异常吗?

问题描述

我知道 Axons messgaes 应该位于同一个包中。但是其他应用程序中使用的异常也应该在同一个包中吗?

因为我在做传奇和补偿交易

例如,当 PaymentService 应用程序的 PaymentAggregates 实例将抛出 NotEnoughMoneyException(如果没有足够的钱)并且 OrderManagermentSaga(orchestration Saga 实例)必须从 PaymentService 接收异常时,异常是否应该具有相同的包?

我说得太多了,重点是“其他应用程序中使用的异常也应该在同一个地方吗?”

标签: axon

解决方案


对此的简短回答是“视情况而定”。不过,让我给你一个更详细的解释。

它取决于您如何回复处理某些消息的失败场景。您是否正在尝试序列化异常并将其推送到网络上?或者,您会捕获异常并将其调整为其他内容吗?

第一步是 Axon曾经做过的事情。该框架已调整为在最近的版本中包含任何异常。HandlerExecutionExceptionHandlerExecutionException有一个特定于命令和查询的版本)带有一个所谓的details Object. Axon 将确保此对象作为HandlerExecutionException.

details对象的目的是让您可以在应用程序中构建自己的异常 API。这个 API 确实应该是您存储消息的同一个包的一部分,因为它是您的核心 API 的一部分。

实际上,我已经记录了如何填充这些细节对象。如果你有兴趣,你可以在这里找到。还有另一个示例,角度略有不同(阅读:它不使用@ExceptionHandler注释),您可以在此处找到。最后,虽然相当微薄,但参考指南中也有一些关于此的内容。


推荐阅读