Exception handling Axon4-标准异常处理机制

Exception handling Axon4-标准异常处理机制,exception-handling,axon,Exception Handling,Axon,Axon4的标准异常处理机制是什么? 此外,您如何确保在Saga中的某个事件期间(在两个状态之间)发生异常时,回滚以前的状态 任何例子都会有帮助。这是你在这里问的一个相当广泛的问题,Prashant,有几个答案。此外,您还提出了两个问题,一个是什么是异常处理方法,两个是如何处理Sagas中的异常 所以,在您谈论传奇和事件时,我将采取您希望了解事件周围的异常处理过程的立场。让我先回答你的第一个问题。 正如您可能在参考指南中所读到的,Axon使用所谓的EventProcessor作为技术机制,将事件

Axon4的标准异常处理机制是什么? 此外,您如何确保在Saga中的某个事件期间(在两个状态之间)发生异常时,回滚以前的状态


任何例子都会有帮助。

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

所以,在您谈论传奇和事件时,我将采取您希望了解事件周围的异常处理过程的立场。让我先回答你的第一个问题。 正如您可能在参考指南中所读到的,Axon使用所谓的
EventProcessor
作为技术机制,将事件获取到您的“事件处理组件”和Saga实例

EventProcessors
允许两种不同级别的异常处理: 1.当
@EventHandler
/
@SagaEventHandler
注释函数中发生异常时,可以在
ListenerInvocationErrorHandler
中捕获该异常。 2.当
事件处理器
中发生异常时,可以在
错误处理程序
中捕获该异常

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

您要问的第二个问题是,当发生异常时,如何回滚事件中的状态。我想在这里给大家的建议是,在收到事件后,您首先更改状态,然后才执行其他操作

其他操作,如调用第三方服务或发布命令。 正如您所注意到的,这些操作可能会因异常而失败。然而,这不应该让传奇的状态倒退。 事情已经发生了。之后的操作失败这一事实不会改变该事件发生的事实


因此,我建议您在出现此类异常时执行补偿操作。

感谢Steven详细的回答!别担心,普拉尚特!:-)通过补偿操作,您的意思是生成补偿事件和设计事件处理程序,以回滚状态。如果您能提供
ListenerInvocationErrorHandler
和“ErrorHandler”实现的示例,将不胜感激消息世界中的一个操作通常是一个命令。但是,它的格式或名称完全取决于您所在的域名。好问题@rodrigocprates,但我认为这是自己的问题,而不是在这里的评论部分。您介意在StackOverflow上创建一个专用请求吗?我正在用
axon
标记积极地跟踪问题,因此这样标记它将使它成为我(最终)找到它的工具。