常见路由器参数
本节描述了所有路由器参数共有的参数(即在本章前面显示的两个表中所有框都打勾的参数)。
链的内部和外部
以下参数对链内外的所有路由器都有效。
apply-sequence
此属性指定是否应将序列号和大小标题添加到每个消息中。这个可选属性默认为 false
。
默认输出通道
如果设置,此属性提供一个引用,指向在渠道解析未能返回任何渠道时应发送消息的渠道。如果未提供默认输出渠道,路由器将抛出异常。如果您希望静默丢弃这些消息,请将默认输出渠道属性值设置为 nullChannel
。
从 6.0 版本开始,设置默认输出通道也会将 channelKeyFallback
选项重置为 false
。因此,不会尝试根据名称解析通道,而是回退到此默认输出通道——类似于 Java 的 switch
语句。如果显式地将 channelKeyFallback
设置为 true
,进一步的逻辑取决于 resolutionRequired
选项:只有当 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
。
输入通道
此端点的接收消息通道。
order
此属性定义了当此端点作为订阅者连接到通道时的调用顺序。当该通道使用故障转移分发策略时,这尤其相关。当此端点本身是具有队列的通道的轮询消费者时,它没有任何影响。