常用路由器参数

本节描述所有路由器参数的公共参数(本章前面两个表格中所有复选框都已勾选的参数)。

链内和链外

以下参数对链内和链外的所有路由器都有效。

apply-sequence

此属性指定是否应为每条消息添加序列号和大小标头。此可选属性默认为false

default-output-channel

如果设置,此属性提供对通道的引用,如果通道解析未能返回任何通道,则应将消息发送到该通道。如果没有提供默认输出通道,则路由器会抛出异常。如果您想改为静默丢弃这些消息,请将默认输出通道属性值设置为nullChannel

从 6.0 版本开始,设置默认输出通道还会将channelKeyFallback选项重置为false。因此,不会尝试从其名称解析通道,而是回退到此默认输出通道——类似于 Java 的switch语句。如果显式将channelKeyFallback设置为true,则进一步的逻辑取决于resolutionRequired选项:只有当resolutionRequiredfalse时,来自密钥的未解析通道的消息才能到达defaultOutputChannel。因此,AbstractMappingMessageRouter初始化阶段会拒绝defaultOutputChannel已提供且channelKeyFallbackresolutionRequired都设置为true的配置。
resolution-required

此属性指定是否必须始终将通道名称成功解析为存在的通道实例。如果设置为true,则在无法解析通道时会引发MessagingException。将此属性设置为false会导致忽略任何无法解析的通道。此可选属性默认为true

仅当resolution-requiredfalse且未解析通道时,消息才会发送到指定的default-output-channel
ignore-send-failures

如果设置为true,则忽略发送到消息通道的失败。如果设置为false,则会抛出MessageDeliveryException,并且如果路由器解析多个通道,则后续通道不会接收消息。

此属性的确切行为取决于发送消息到的Channel的类型。例如,当使用直接通道(单线程)时,发送失败可能是由下游组件抛出的异常引起的。但是,当向简单的队列通道(异步)发送消息时,抛出异常的可能性相当低。

虽然大多数路由器路由到单个通道,但它们可以返回多个通道名称。例如,recipient-list-router就是这样做的。如果您在仅路由到单个通道的路由器上将此属性设置为true,则任何引起的异常都会被吞下,这通常没有意义。在这种情况下,最好在流程入口点的错误流程中捕获异常。因此,当路由器实现返回多个通道名称时,将ignore-send-failures属性设置为true通常更有意义,因为在失败的通道之后的其他通道仍然会接收消息。

此属性默认为false

timeout

timeout属性指定在将消息发送到目标消息通道时等待的最大时间(毫秒)。

顶级(链外)

以下参数仅适用于链外的所有顶级路由器。

id

标识底层的 Spring bean 定义,对于路由器来说,它是EventDrivenConsumerPollingConsumer的实例,具体取决于路由器的input-channel分别是SubscribableChannel还是PollableChannel。这是一个可选属性。

auto-startup

此“生命周期”属性表示在应用程序上下文启动期间是否应启动此组件。此可选属性默认为true

input-channel

此端点的接收消息通道。

order

当此端点作为订阅者连接到通道时,此属性定义调用顺序。当该通道使用故障转移调度策略时,这一点尤其重要。当此端点本身是具有队列的通道的轮询使用者时,它没有效果。