[英]how to handle messages after splitting (even if there will be errors) in Spring Integration?
我有一個由Spring Integration驅動的應用程序。 簡而言之,該方案是:
|-> activator
gateWay -> splitter -> transformer -> router |-> ...
|-> activator
例如,服務獲取一些json數組,將其拆分為json對象,然后將它們轉換為某些java對象。 在轉換時可能會引發一些驗證錯誤。
Spring Integration Reference說:
拆分器是消息端點的另一種類型,其職責是從其輸入通道接受一條消息,將該消息拆分為多個消息,然后將每個消息發送到其輸出通道。
所以我希望,如果我發送一個帶有一個無效對象的json數組,這會引發驗證錯誤,那么所有其他消息將被正常處理,並且只有一個無效對象將被推送到錯誤通道。 但事實並非如此。 當引發第一個驗證異常時,將不處理所有其他消息。
例如: ["correct", "correct", "invalid"] -->
將處理2條消息,沒關系。 ["invalid", "correct", "correct"] --> 0
將處理["invalid", "correct", "correct"] --> 0
消息。
那么,即使出現錯誤,拆分后如何處理消息?
謝謝
好吧,這實際上不是splitter
組件負責處理下游錯誤的責任。 它是責任的混合,不適合EIP模型。
當您有一個純Java循環時,也會發生同樣的情況。 正確,您可以在循環中使用try...catch
,但是從設計角度看,這看起來並不好。 因此,您決定將處理邏輯移至單獨的方法,並在其中使用try...catch
。 您剛剛划分了責任。
實際上,我們可以對輸出項目的拆分器及其下游訂閱者執行相同的操作。 可以使用ExpressionEvaluatingRequestHandlerAdvice
及其onFailureExpression
, failureChannel
和trapException = true
選項來實現。
您應該在transformer
定義中使用此建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.