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