通用路由器參數
本節描述所有路由器參數通用的參數(在本章稍早的兩個表格中,所有方框都打勾的參數)。
在鏈內和鏈外
以下參數對於鏈內和鏈外的所有路由器都有效。
apply-sequence
-
此屬性指定是否應將序號和大小標頭新增至每個訊息。此選用屬性預設為
false
。 default-output-channel
-
如果設定,此屬性會提供通道的參考,如果通道解析未能傳回任何通道,則應將訊息傳送到該通道。如果未提供預設輸出通道,路由器會擲回例外。如果您希望以靜默方式捨棄這些訊息,請將預設輸出通道屬性值設定為
nullChannel
。從 6.0 版開始,設定預設輸出通道也會將 channelKeyFallback
選項重設為false
。因此,不會嘗試從其名稱解析通道,而是回退到此預設輸出通道 - 類似於 Javaswitch
陳述式。如果channelKeyFallback
明確設定為true
,則進一步的邏輯取決於resolutionRequired
選項:來自金鑰的未解析通道的訊息只有在resolutionRequired
為false
時才能到達defaultOutputChannel
。因此,在提供defaultOutputChannel
且channelKeyFallback
和resolutionRequired
都設定為true
的情況下,AbstractMappingMessageRouter
初始化階段會拒絕此設定。 resolution-required
-
此屬性指定是否必須始終成功地將通道名稱解析為存在的通道實例。如果設定為
true
,則在無法解析通道時會引發MessagingException
。將此屬性設定為false
會導致忽略任何無法解析的通道。此選用屬性預設為true
。如果指定了 default-output-channel
,則僅當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
-
當此端點作為訂閱者連線到通道時,此屬性定義調用的順序。當該通道使用容錯移轉分派策略時,此屬性尤其相關。當此端點本身是具有佇列的通道的輪詢消費者時,此屬性不起作用。