簡體   English   中英

如何獲取在 Axon 錯誤處理程序中產生錯誤的事件處理程序?

[英]How can I get the event handler that produced an error in a Axon Error handler?

我剛剛為 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 框架中調用ErrorHandler並不一定意味着實際的@EventHandler注釋 function 已被調用。

因此,對此問題沒有任何保證,因此此時沒有給出事件處理程序。

此外,如果到達ErrorHandler ,這通常意味着事務( UnitOfWork )將被回滾。 因此,對於任何事件處理程序或事件處理組件,操作都會被調整。

因此,進入ErrorHandler的異常本質上意味着應該再次調用事件處理器的所有事件處理程序部分。 因此,知道確切的實例並不是立即需要的。 相反,您需要一個[定期/調用時]檢查死信隊列並調用給定事件處理器的所有處理程序以再次處理給定事件的進程。

這是我對這個場景的兩分錢,希望這對你有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM