【问题标题】:How can I get the event handler that produced an error in a Axon Error handler?如何获取在 Axon 错误处理程序中产生错误的事件处理程序?
【发布时间】:2020-08-13 11:07:48
【问题描述】:

我刚刚为 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
    }

考虑到每个事件处理程序都隔离在不同的处理组中,因此每个事件处理程序都应该在自己的事务中运行... 有没有办法获取产生错误的事件处理程序?

【问题讨论】:

    标签: java kotlin error-handling axon


    【解决方案1】:

    ErrorHandler 级别,您“缺少”事件处理程序信息,因为从 Axon 框架中调用 ErrorHandler 并不一定意味着已调用实际的 @EventHandler 注释函数。

    因此,无法保证这一点,因此目前没有提供事件处理程序。

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

    因此,进入ErrorHandler 的异常本质上意味着应该再次调用事件处理器的所有事件处理程序部分。因此,知道确切的实例并不是立即需要的。 相反,您需要一个[定期/在调用时]检查死信队列并调用给定事件处理器的所有处理程序以再次处理给定事件的进程。

    这是我对这个场景的两分钱,希望这对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 2020-09-01
      • 2021-12-27
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多