概述
路由器是许多消息架构中的关键元素。它们从消息通道消费消息,并根据一组条件将每个消费的消息转发到一个或多个不同的消息通道。
Spring Integration 提供了以下路由器:
路由器实现共享许多配置参数。然而,路由器之间存在一些差异。此外,配置参数的可用性取决于路由器是在链内还是链外使用。为了提供一个快速概览,所有可用属性列在以下两个表中。
下表显示了链外路由器可用的配置参数:
表 1. 链外路由器
| 属性 | 路由器 | header 值 路由器 | XPath 路由器 | 有效负载类型 路由器 | 收件人列表路由 | 异常类型 路由器 | 
|---|---|---|---|---|---|---|
| apply-sequence |  |  |  |  |  |  | 
| 默认输出通道 |  |  |  |  |  |  | 
| resolution-required |  |  |  |  |  |  | 
| 忽略-发送-失败 |  |  |  |  |  |  | 
| 超时 |  |  |  |  |  |  | 
| id |  |  |  |  |  |  | 
| 自动启动 |  |  |  |  |  |  | 
| 输入通道 |  |  |  |  |  |  | 
| 订单 |  |  |  |  |  |  | 
| 方法 |  | |||||
| ref |  | |||||
| 表达式 |  | |||||
| header-name |  | |||||
| evaluate-as-string |  | |||||
| xpath 表达式引用 |  | |||||
| 转换器 |  | 
下表显示了链中路由器可用的配置参数:
表 2. 链中的路由器
| 属性 | 路由器 | header 值 路由器 | xpath 路由器 | 有效负载类型 路由器 | 收件人列表路由器 | 异常类型 路由器 | 
|---|---|---|---|---|---|---|
| apply-sequence |  |  |  |  |  |  | 
| 默认输出通道 |  |  |  |  |  |  | 
| resolution-required |  |  |  |  |  |  | 
| 忽略-发送-失败 |  |  |  |  |  |  | 
| 超时 |  |  |  |  |  |  | 
| id | ||||||
| 自动启动 | ||||||
| 输入通道 | ||||||
| 订单 | ||||||
| 方法 |  | |||||
| 引用 |  | |||||
| 表达式 |  | |||||
| header-name |  | |||||
| 评估为字符串 |  | |||||
| xpath 表达式引用 |  | |||||
| 转换器 |  | 
important
从 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"。