如何获取在Axon错误处理程序中产生错误的事件处理程序



我刚刚为ListenerInvocationErrorHandler中处理的错误实现了一个死信:

override fun onError(exception: Exception, event: EventMessage<*>, eventHandler: EventMessageHandler) {
// Insert in dead letter
}

这很好,因为我已经获得了所需的信息(异常、事件和事件处理程序(,所以我可以通过调用eventHandler.process(event(.来重新处理

然而,对于在ErrorHandler中处理的错误(通常是持久性错误(,我缺少事件处理程序信息:

override fun handleError(errorContext: ErrorContext) {
// No event handler info
}

考虑到每个事件处理程序都隔离在不同的处理组中,因此每个事件处理器都应该在自己的事务中运行。。。是否有任何方法可以获取产生错误的事件处理程序?

ErrorHandler级别上;缺少";事件处理程序信息,因为从Axon Framework中调用ErrorHandler并不一定意味着已经调用了实际的@EventHandler注释函数。

因此,不能保证这一点,因此目前没有给出事件处理程序。

此外,如果达到ErrorHandler,通常意味着事务(UnitOfWork(将回滚。因此,对于任何事件处理程序或事件处理组件,操作都将进行调整。

因此,进入ErrorHandler的异常本质上意味着事件处理器的所有事件处理程序部分都应该再次调用。因此,了解确切的例子并不是当务之急。相反,您需要一个进程[周期性地/在调用时]检查死信队列,并调用给定事件处理器的所有处理程序来再次处理给定事件。

这是我的两美分的场景,希望这能帮助你摆脱胡安。

最新更新