概述

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

Spring Integration 提供以下路由器:

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

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

表 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 Integration 2.1 开始,路由器参数在所有路由器实现中都更加标准化。因此,一些细微的更改可能会破坏基于旧版 Spring Integration 的应用程序。

从 Spring Integration 2.1 开始,ignore-channel-name-resolution-failures 属性已被删除,取而代之的是将其行为与 resolution-required 属性合并。此外,resolution-required 属性现在默认为 true

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

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