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

Should I declare Exceptions in same package in Axon?

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

因为我正在做 Sagas 和补偿交易并且

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

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

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

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

第一步是 Axon 曾经 做的事情。在最近的版本中,该框架已调整为在 HandlerExecutionException 中包装 any 异常。 HandlerExecutionException(有一个特定于命令和查询的版本)带有所谓的 details Object。 Axon 将确保此对象被序列化为 HandlerExecutionException.

的一部分

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

的一部分

我实际上已经记录了如何填充这些详细信息对象。有兴趣的可以找here. There's also another sample, taking a slightly different angle (read: it doesn't use the @ExceptionHandler annotation), which you can find here. And lastly, although rather meager, there's also a bit on this in the Reference Guide.