|
如需使用最新稳定版本,请使用 Spring Integration 7.0.4! |
常见路由参数
此部分描述了所有路由器参数共有的参数(在本章早期显示的两张表中所有方框都打勾的参数)。
链的内部与外部
以下参数适用于所有链内外的所有路由器。
apply-sequence-
此属性指定是否应在每个消息中添加序列号和大小标头。 此可选属性默认值为
false。 default-output-channel-
如果设置此属性,则该属性提供一个引用,指示如果通道解析无法返回任何通道,则应向哪个通道发送消息。 如果没有提供默认输出通道,则路由器将抛出异常。 如果您希望无声地丢弃这些消息,请将默认输出通道属性值设置为
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-
The
timeout属性指定在向目标消息通道发送消息时等待的最大时间(以毫秒为单位)。
顶级(链外)
以下参数仅在所有顶级路由器(不在链中的)之间有效。
id-
标识底层的Spring bean定义,而在路由器的情况下,这可以是
EventDrivenConsumer或PollingConsumer,具体取决于路由器的input-channel是一个SubscribableChannel还是一个PollableChannel。 这是一个可选属性。 auto-startup-
此“生命周期”属性表示该组件是否应该在应用程序上下文启动时被启动。 此可选属性默认值为
true。 input-channel-
此端点的接收消息通道。
order-
此属性定义了当该端点作为频道的订阅者连接时的调用顺序。 这在该频道使用失败重试分发策略时尤为重要。 当该端点本身是一个轮询消费者且通道带有队列时,此属性无效。