常用路由器引數
本節描述了所有路由器引數共有的引數(在本章前面顯示的兩個表格中,這些引數的所有複選框都已勾選)。
在鏈內和鏈外
以下引數適用於鏈內和鏈外的所有路由器。
apply-sequence
-
此屬性指定是否應將序列號和大小標頭新增到每個訊息。此可選屬性預設為
false
。 default-output-channel
-
如果設定,此屬性提供了一個通道引用,當通道解析失敗未能返回任何通道時,訊息將傳送到此通道。如果未提供預設輸出通道,路由器將丟擲異常。如果您希望改為靜默丟棄這些訊息,請將預設輸出通道屬性值設定為
nullChannel
。從版本 6.0 開始,設定預設輸出通道也會將 channelKeyFallback
選項重置為false
。因此,將不會嘗試從通道名稱解析通道,而是回退到此預設輸出通道 - 類似於 Java 的switch
語句。如果明確將channelKeyFallback
設定為true
,則後續邏輯取決於resolutionRequired
選項:來自 key 的訊息只有在resolutionRequired
為false
時才能到達未解析通道的defaultOutputChannel
。因此,在提供defaultOutputChannel
且同時將channelKeyFallback
和resolutionRequired
都設定為true
的配置將被AbstractMappingMessageRouter
的初始化階段拒絕。 resolution-required
-
此屬性指定通道名稱是否必須始終成功解析為存在的通道例項。如果設定為
true
,當通道無法解析時會引發MessagingException
。將此屬性設定為false
會導致任何無法解析的通道被忽略。此可選屬性預設為true
。當 resolution-required
為false
且通道未解析時,訊息僅傳送到指定的default-output-channel
(如果已指定)。 ignore-send-failures
-
如果設定為
true
,則傳送到訊息通道的失敗將被忽略。如果設定為false
,則會丟擲MessageDeliveryException
,並且如果路由器解析出多個通道,後續通道將不會收到訊息。此屬性的確切行為取決於傳送訊息的
Channel
型別。例如,使用直接通道(單執行緒)時,傳送失敗可能是由下游更遠處的元件丟擲的異常引起的。然而,將訊息傳送到簡單佇列通道(非同步)時,丟擲異常的可能性非常小。儘管大多數路由器只路由到一個通道,但它們可以返回多個通道名稱。例如, recipient-list-router
就是如此。如果在僅路由到單個通道的路由器上將此屬性設定為true
,則會吞下任何引起的異常,這通常沒有多大意義。在這種情況下,最好在流入口點的錯誤流中捕獲異常。因此,當路由器實現返回多個通道名稱時,將ignore-send-failures
屬性設定為true
通常更有意義,因為失敗通道之後的其他通道仍將收到訊息。此屬性預設為
false
。 timeout
-
timeout
屬性指定向目標訊息通道傳送訊息時等待的最長時間(毫秒)。
頂級 (鏈外)
以下引數僅適用於鏈外的所有頂級路由器。
id
-
標識底層的 Spring bean 定義,對於路由器而言,它是一個
EventDrivenConsumer
或PollingConsumer
的例項,具體取決於路由器的input-channel
是SubscribableChannel
還是PollableChannel
。這是一個可選屬性。 auto-startup
-
此“生命週期”屬性表明該元件是否應在應用上下文啟動期間啟動。此可選屬性預設為
true
。 input-channel
-
此端點的接收訊息通道。
order
-
此屬性定義當此端點作為訂閱者連線到通道時呼叫的順序。這在使用故障轉移分派策略的通道中尤其相關。當此端點本身是帶有佇列的通道的輪詢消費者時,此屬性不起作用。