常用路由器参数
本节描述了所有路由器参数共有的参数(在本章前面显示的两个表格中,这些参数的所有复选框都已勾选)。
在链内和链外
以下参数适用于链内和链外的所有路由器。
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
-
此属性定义当此端点作为订阅者连接到通道时调用的顺序。这在使用故障转移分派策略的通道中尤其相关。当此端点本身是带有队列的通道的轮询消费者时,此属性不起作用。