Axon4 - 标准的异常处理机制

Axon4 - Standard exception handling mechanism

Axon4 的标准异常处理机制是什么? 另外 - 你如何确保如果在 Saga 中的事件之一(在状态之间)发生异常,以前的状态会回滚?

任何例子都会有所帮助。

Prashant 在这里问的这个问题相当宽泛,有几个答案。另外,你问了两个问题,一个是什么是异常处理方法,两个是如何处理 Sagas 中的异常。

因此,当您谈论 Sagas 和事件时,我的立场是您想了解围绕事件的异常处理过程。我先在这里回答你的第一个问题。 正如您可能在参考指南中读到的那样,Axon 使用所谓的 EventProcessor 作为技术机制来将事件发送到您的 'event handling components' Saga 实例。

EventProcessors 允许两种不同级别的异常处理: 1、当@EventHandler/@SagaEventHandler注解函数发生异常时,可以在ListenerInvocationErrorHandler中捕获。 2.当EventProcessor发生异常时,可以在ErrorHandler.

中捕获

这两个都可以在 Axon 4 中通过处理 EventProcessingConfigurer 并调用它们各自的寄存器函数来设置,这允许您设置全局默认值或根据事件处理器调整这些。 默认值分别是 LoggingErrorHandlerPropagatingErrorHandler.

你问的第二个问题是发生异常时如何回滚Saga中的状态。这里给大家的建议是,收到事件后,先改变状态,然后再进行其他操作

调用第三方服务或发布命令等其他操作。 正如您所注意到的,这些操作可能会因异常而失败。然而,这根本不应该回滚 Saga 的状态。 事件已经发生。之后的操作失败并不会改变事件已经发生的事实。

因此,我的建议是,如果发生此类异常,您执行补偿操作