概览

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

Spring Integration 提供了以下路由器:

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

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

表 1. 链外部路由器
属性 router header value router xpath router payload type router recipient list route exception type router

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. 链内部路由器
属性 router header value router xpath router payload type router recipient list router exception type router

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"。