我应该在Axon的同一个包中声明异常吗?



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

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

例如,当PaymentService应用程序的PaymentAggregates实例将抛出NotEnoughMoneyException(如果没有足够的钱)和OrderManagermentSaga(业务流程Saga实例)必须接收来自PaymentService的异常例外应该有相同的包吗?

我已经说了太多了,关键是"在其他应用程序中使用的异常也应该在相同的地方吗?">

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

这取决于您如何响应处理某些消息的失败场景。您是否试图序列化异常并将其传递给网络?或者,您会捕获异常并将其调整为其他内容吗?

第一步是Axon使用所做的。在最近的版本中,框架已经调整为在HandlerExecutionException中包装任何异常。HandlerExecutionException(有一个特定于命令和查询的版本)携带一个所谓的detailsObject。Axon将确保此对象作为HandlerExecutionException的一部分序列化。

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

我实际上做了一个关于如何填充这些细节对象的记录。如果你感兴趣,你可以在这里找到。还有另一个示例,从稍微不同的角度(请注意:它没有使用@ExceptionHandler注释),您可以在这里找到。最后,尽管相当贫乏,参考指南中也有一些关于这方面的内容。

最新更新