此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.4.3! |
常用路由器参数
本节介绍所有路由器参数的通用参数(在本章前面显示的两个表中勾选了所有框的参数)。
链内部和外部
以下参数对链内外的所有路由器都有效。
apply-sequence
-
此属性指定是否应将 sequence number 和 size 标头添加到每条消息中。 此可选属性默认为
false
. default-output-channel
-
如果设置,则此属性将提供对通道的引用,如果通道解析无法返回任何通道,则应将消息发送到该通道。 如果未提供默认 output channel,则 router 将引发异常。 如果要改为以静默方式删除这些消息,请将默认 output channel 属性值设置为
nullChannel
.从版本 6.0 开始,设置默认输出通道也会重置 channelKeyFallback
选项设置为false
. 因此,不会尝试从通道的名称解析通道,而是回退到这个默认输出通道 - 类似于 Javaswitch
陈述。 如果channelKeyFallback
设置为true
显式地,进一步的 logic 取决于resolutionRequired
选项:消息 to non-resolved channel from key 可以到达defaultOutputChannel
仅当resolutionRequired
是false
. 因此,其中defaultOutputChannel
提供,并且channelKeyFallback
&resolutionRequired
设置为true
被AbstractMappingMessageRouter
初始化阶段。 resolution-required
-
此属性指定是否必须始终将通道名称成功解析为存在的通道实例。 如果设置为
true
一个MessagingException
在无法解析通道时引发。 将此属性设置为false
导致忽略任何无法解析的通道。 此可选属性默认为true
.Message 仅发送到 default-output-channel
,如果指定,则resolution-required
是false
并且通道未解析。 ignore-send-failures
-
如果设置为
true
,则忽略发送到消息通道的失败。 如果设置为false
一个MessageDeliveryException
被抛出,并且如果路由器解析多个 channel,则任何后续 channel 都不会收到该消息。此属性的确切行为取决于
Channel
消息将发送到 。 例如,当使用直接通道(单线程)时,发送失败可能是由更远的下游组件抛出的异常引起的。 但是,当将消息发送到简单的队列通道 (异步) 时,引发异常的可能性相当小。虽然大多数路由器路由到单个通道,但它们可以返回多个通道名称。 这 recipient-list-router
,就是这样做的。 如果将此属性设置为true
在仅路由到单个 channel 的路由器上,任何引起的 exception 都会被吞噬,这通常没有什么意义。 在这种情况下,最好在流入口点捕获错误流中的异常。 因此,将ignore-send-failures
属性设置为true
当 Router 实现返回多个 channel name 时,通常更有意义,因为失败的 channel 之后的其他 channel(s) 仍将收到该消息。此属性默认为
false
. timeout
-
这
timeout
属性指定在向目标 Message Channel 发送消息时等待的最长时间(以毫秒为单位)。
顶层(链外)
以下参数仅对链之外的所有顶级路由器有效。
id
-
标识底层 Spring bean 定义,在路由器的情况下,它是
EventDrivenConsumer
或PollingConsumer
,具体取决于路由器的input-channel
是一个SubscribableChannel
或PollableChannel
分别。 这是一个可选属性。 auto-startup
-
此 “lifecycle” 属性指示是否应在应用程序上下文启动期间启动此组件。 此可选属性默认为
true
. input-channel
-
此终端节点的接收消息通道。
order
-
此属性定义当此终端节点作为订阅者连接到通道时的调用顺序。 当该通道使用 failover dispatching 策略时,这一点尤其重要。 当此终端节点本身是具有队列的通道的轮询使用者时,它不起作用。