通用路由器引數
本節描述了所有路由器引數通用的引數(本章前面所示的兩個表中所有框都被勾選的引數)。
鏈內和鏈外
以下引數適用於鏈內和鏈外的所有路由器。
apply-sequence-
此屬性指定是否應將序列號和大小頭新增到每個訊息中。此可選屬性預設為
false。 default-output-channel-
如果設定,此屬性提供對當通道解析未能返回任何通道時訊息應傳送到的通道的引用。如果沒有提供預設輸出通道,路由器將丟擲異常。如果您希望靜默丟棄這些訊息,請將預設輸出通道屬性值設定為
nullChannel。從版本 6.0 開始,設定預設輸出通道還會將 channelKeyFallback選項重置為false。因此,將不會嘗試從其名稱解析通道,而是回退到此預設輸出通道 - 類似於 Javaswitch語句。如果明確將channelKeyFallback設定為true,則進一步的邏輯取決於resolutionRequired選項:只有當resolutionRequired為false時,來自鍵的未解析通道的訊息才能到達defaultOutputChannel。因此,AbstractMappingMessageRouter初始化階段會拒絕同時提供defaultOutputChannel並將channelKeyFallback和resolutionRequired都設定為true的配置。 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屬性指定向目標訊息通道傳送訊息時等待的最長時間(毫秒)。
頂層(鏈外)
以下引數僅適用於所有鏈外的頂層路由器。
id-
標識底層的 Spring bean 定義,對於路由器,它是一個
EventDrivenConsumer或PollingConsumer例項,具體取決於路由器的input-channel是SubscribableChannel還是PollableChannel。這是一個可選屬性。 auto-startup-
此“生命週期”屬性表示此元件是否應在應用程式上下文啟動期間啟動。此可選屬性預設為
true。 input-channel-
此端點的接收訊息通道。
命令-
當此端點作為訂閱者連線到通道時,此屬性定義呼叫的順序。當該通道使用故障轉移分派策略時,這尤其相關。當此端點本身是帶有佇列的通道的輪詢消費者時,它沒有影響。