簡體   English   中英

Spring Integration中拆分(即使會有錯誤)后如何處理消息?

[英]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及其onFailureExpressionfailureChanneltrapException = true選項來實現。

您應該在transformer定義中使用此建議。

請參閱《 參考手冊》中的更多信息。 示例應用程序中也有一些線索。

暫無
暫無

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

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