Axon4的标准异常处理机制是什么? 附加地-您如何确保如果在Saga中的一个事件中(在州之间)发生异常,以前的状态会被回滚?
任何示例都会有所帮助。
答案 0 :(得分:0)
这是您在Prashant提出的一个相当广泛的问题,并提供了一些答案。另外,您要问两个问题,一个是异常处理方法是什么,两个是如何在Sagas中处理异常。
因此,当您谈论Sagas和事件时,我将采取一种立场,即您想了解事件周围的异常处理过程。首先让我在这里回答您的第一个问题。
正如您可能在参考指南中已经读过的那样,Axon使用一种称为EventProcessor
的技术机制来将事件获取到“事件处理组件” 和 Saga实例。
EventProcessors
允许两种不同级别的异常处理:
1.在@EventHandler
/ @SagaEventHandler
注释的函数中发生异常时,可以在ListenerInvocationErrorHandler
中捕获该异常。
2. EventProcessor
中发生异常时,可以在ErrorHandler
中捕获该异常。
可以在Axon 4中通过处理EventProcessingConfigurer
并调用它们各自的寄存器函数来设置这两项,这使您可以设置全局默认值或针对每个事件处理器进行调整。
默认值分别为LoggingErrorHandler
和PropagatingErrorHandler
。
您要询问的第二个问题是有关发生异常时如何还原Saga中的状态。我想在这里给您的建议是,收到事件后,您首先更改状态,然后再执行操作。
其他操作,如调用第三方服务或发布命令。 如您所知,这些操作可能会失败,并出现异常。但是,这根本不应该还原Saga的状态。 事件已经发生。失败之后的操作不会改变该事件已发生的事实。
因此,我建议您在发生此类异常时执行补偿操作。