通用路由器參數

本節描述所有路由器參數通用的參數(在本章稍早的兩個表格中,所有方框都打勾的參數)。

在鏈內和鏈外

以下參數對於鏈內和鏈外的所有路由器都有效。

apply-sequence

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

default-output-channel

如果設定,此屬性會提供通道的參考,如果通道解析未能傳回任何通道,則應將訊息傳送到該通道。如果未提供預設輸出通道,路由器會擲回例外。如果您希望以靜默方式捨棄這些訊息,請將預設輸出通道屬性值設定為 nullChannel

從 6.0 版開始,設定預設輸出通道也會將 channelKeyFallback 選項重設為 false。因此,不會嘗試從其名稱解析通道,而是回退到此預設輸出通道 - 類似於 Java switch 陳述式。如果 channelKeyFallback 明確設定為 true,則進一步的邏輯取決於 resolutionRequired 選項:來自金鑰的未解析通道的訊息只有在 resolutionRequiredfalse 時才能到達 defaultOutputChannel。因此,在提供 defaultOutputChannelchannelKeyFallbackresolutionRequired 都設定為 true 的情況下,AbstractMappingMessageRouter 初始化階段會拒絕此設定。
resolution-required

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

如果指定了 default-output-channel,則僅當 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

當此端點作為訂閱者連線到通道時,此屬性定義調用的順序。當該通道使用容錯移轉分派策略時,此屬性尤其相關。當此端點本身是具有佇列的通道的輪詢消費者時,此屬性不起作用。