通用路由器参数
本节介绍所有路由参数的通用参数(即在本章前面显示的两个表格中所有框都被勾选的参数)。
链内和链外
以下参数适用于链内和链外的所有路由器。
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
。仅当 resolution-required
为false
且通道未解析时,消息才会发送到default-output-channel
(如果指定)。 ignore-send-failures
-
如果设置为
true
,则忽略发送到消息通道的失败。如果设置为false
,则会抛出MessageDeliveryException
,并且如果路由器解析了多个通道,则任何后续通道都不会收到消息。此属性的确切行为取决于发送消息的
Channel
类型。例如,当使用直接通道(单线程)时,发送失败可能是由更下游组件抛出的异常引起的。但是,当将消息发送到简单队列通道(异步)时,抛出异常的可能性很小。虽然大多数路由器路由到单个通道,但它们可以返回多个通道名称。例如, recipient-list-router
正是如此。如果您将此属性设置为仅路由到单个通道的路由器的true
,则任何发生的异常都会被吞没,这通常没有意义。在这种情况下,最好在流入口处的错误流中捕获异常。因此,当路由器实现返回多个通道名称时,将ignore-send-failures
属性设置为true
通常更有意义,因为在失败的通道之后的其他通道(s)仍然会收到消息。此属性默认为
false
。 超时
-
timeout
属性指定在将消息发送到目标消息通道时等待的最大时间(以毫秒为单位)。
顶级(链外)
以下参数仅对所有位于链之外的顶级路由器有效。
ID
-
标识底层 Spring bean 定义,在路由器的情况下,它是
EventDrivenConsumer
或PollingConsumer
的实例,具体取决于路由器的input-channel
分别是SubscribableChannel
还是PollableChannel
。这是一个可选属性。 自动启动
-
此“生命周期”属性表示此组件是否应在应用程序上下文启动期间启动。此可选属性默认为
true
。 输入通道
-
此端点的接收消息通道。
顺序
-
此属性定义当此端点作为订阅者连接到通道时调用的顺序。当该通道使用故障转移调度策略时,这一点尤其重要。当此端点本身是具有队列的通道的轮询使用者时,它没有影响。