概述

路由器是许多消息架构中的关键元素。它们从消息通道中消费消息,并根据一组条件将每个消费的消息转发到一个或多个不同的消息通道。

Spring 集成提供以下路由器

路由器实现共享许多配置参数。但是,路由器之间存在一些差异。此外,配置参数的可用性取决于路由器是在链内还是链外使用。为了提供快速概述,所有可用属性都在以下两个表中列出。

下表显示了链外路由器可用的配置参数

表 1. 链外路由器
属性 路由器 报头值路由器 XPath 路由器 有效负载类型路由器 收件人列表路由 异常类型路由器

apply-sequence

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

default-output-channel

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

resolution-required

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

ignore-send-failures

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

timeout

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

id

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

auto-startup

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

input-channel

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

order

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

method

tickmark

ref

tickmark

expression

tickmark

header-name

tickmark

evaluate-as-string

tickmark

xpath-expression-ref

tickmark

converter

tickmark

下表显示了链内路由器可用的配置参数

表 2. 链内路由器
属性 路由器 报头值路由器 XPath 路由器 有效负载类型路由器 收件人列表路由器 异常类型路由器

apply-sequence

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

default-output-channel

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

resolution-required

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

ignore-send-failures

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

timeout

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

id

auto-startup

input-channel

order

method

tickmark

ref

tickmark

expression

tickmark

header-name

tickmark

evaluate-as-string

tickmark

xpath-expression-ref

tickmark

converter

tickmark

从 Spring 集成 2.1 开始,路由器参数在所有路由器实现中更加标准化。因此,一些细微的更改可能会破坏旧的基于 Spring 集成的应用程序。

从 Spring 集成 2.1 开始,ignore-channel-name-resolution-failures 属性被删除,以支持将其行为与 resolution-required 属性合并。此外,resolution-required 属性现在默认为 true

在这些更改之前,resolution-required 属性默认为 false,导致当没有解析通道且没有设置 default-output-channel 时,消息会被静默丢弃。新行为要求至少解析一个通道,并且默认情况下,如果未确定任何通道(或发送尝试不成功),则会抛出 MessageDeliveryException

如果您希望静默地丢弃消息,可以设置 default-output-channel="nullChannel"