常用路由器引數

本節描述了所有路由器引數共有的引數(在本章前面顯示的兩個表格中,這些引數的所有複選框都已勾選)。

在鏈內和鏈外

以下引數適用於鏈內和鏈外的所有路由器。

apply-sequence

此屬性指定是否應將序列號和大小標頭新增到每個訊息。此可選屬性預設為 false

default-output-channel

如果設定,此屬性提供了一個通道引用,當通道解析失敗未能返回任何通道時,訊息將傳送到此通道。如果未提供預設輸出通道,路由器將丟擲異常。如果您希望改為靜默丟棄這些訊息,請將預設輸出通道屬性值設定為 nullChannel

從版本 6.0 開始,設定預設輸出通道也會將 channelKeyFallback 選項重置為 false。因此,將不會嘗試從通道名稱解析通道,而是回退到此預設輸出通道 - 類似於 Java 的 switch 語句。如果明確將 channelKeyFallback 設定為 true,則後續邏輯取決於 resolutionRequired 選項:來自 key 的訊息只有在 resolutionRequiredfalse 時才能到達未解析通道的 defaultOutputChannel。因此,在提供 defaultOutputChannel 且同時將 channelKeyFallbackresolutionRequired 都設定為 true 的配置將被 AbstractMappingMessageRouter 的初始化階段拒絕。
resolution-required

此屬性指定通道名稱是否必須始終成功解析為存在的通道例項。如果設定為 true,當通道無法解析時會引發 MessagingException。將此屬性設定為 false 會導致任何無法解析的通道被忽略。此可選屬性預設為 true

resolution-requiredfalse 且通道未解析時,訊息僅傳送到指定的 default-output-channel(如果已指定)。
ignore-send-failures

如果設定為 true,則傳送到訊息通道的失敗將被忽略。如果設定為 false,則會丟擲 MessageDeliveryException,並且如果路由器解析出多個通道,後續通道將不會收到訊息。

此屬性的確切行為取決於傳送訊息的 Channel 型別。例如,使用直接通道(單執行緒)時,傳送失敗可能是由下游更遠處的元件丟擲的異常引起的。然而,將訊息傳送到簡單佇列通道(非同步)時,丟擲異常的可能性非常小。

儘管大多數路由器只路由到一個通道,但它們可以返回多個通道名稱。例如,recipient-list-router 就是如此。如果在僅路由到單個通道的路由器上將此屬性設定為 true,則會吞下任何引起的異常,這通常沒有多大意義。在這種情況下,最好在流入口點的錯誤流中捕獲異常。因此,當路由器實現返回多個通道名稱時,將 ignore-send-failures 屬性設定為 true 通常更有意義,因為失敗通道之後的其他通道仍將收到訊息。

此屬性預設為 false

timeout

timeout 屬性指定向目標訊息通道傳送訊息時等待的最長時間(毫秒)。

頂級 (鏈外)

以下引數僅適用於鏈外的所有頂級路由器。

id

標識底層的 Spring bean 定義,對於路由器而言,它是一個 EventDrivenConsumerPollingConsumer 的例項,具體取決於路由器的 input-channelSubscribableChannel 還是 PollableChannel。這是一個可選屬性。

auto-startup

此“生命週期”屬性表明該元件是否應在應用上下文啟動期間啟動。此可選屬性預設為 true

input-channel

此端點的接收訊息通道。

order

此屬性定義當此端點作為訂閱者連線到通道時呼叫的順序。這在使用故障轉移分派策略的通道中尤其相關。當此端點本身是帶有佇列的通道的輪詢消費者時,此屬性不起作用。