概述
路由器是许多消息架构中的关键组件。它们从消息通道消费消息,并根据一组条件将每个消费的消息转发到一个或多个不同的消息通道。
Spring Integration 提供了以下路由器:
路由器的实现共享许多配置参数。然而,不同路由器之间存在一些差异。此外,配置参数的可用性取决于路由器是在链内还是链外使用。为了提供快速概览,以下两个表格列出了所有可用的属性。
下表展示了链外路由器的可用配置参数:
表 1. 链外路由器
| 属性 | 路由器 | header value router | xpath 路由器 | payload type router | 收件人列表路由 | 异常类型路由器 |
|---|---|---|---|---|---|---|
| apply-sequence | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| default-output-channel | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| resolution-required | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| ignore-send-failures | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| 超时 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| id | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| 自动启动 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| input-channel | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| order | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| 方法 | ![]() | |||||
| ref | ![]() | |||||
| 表达式 | ![]() | |||||
| header-name | ![]() | |||||
| evaluate-as-string | ![]() | |||||
| xpath-expression-ref | ![]() | |||||
| 转换器 | ![]() |
下表展示了链内路由器的可用配置参数:
表 2. 链内的路由器
| 属性 | 路由器 | header value router | xpath 路由器 | payload type router | 收件人列表路由器 | 异常类型路由器 |
|---|---|---|---|---|---|---|
| apply-sequence | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| default-output-channel | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| resolution-required | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| ignore-send-failures | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| 超时 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| id | ||||||
| 自动启动 | ||||||
| 输入通道 | ||||||
| order | ||||||
| method | ![]() | |||||
| ref | ![]() | |||||
| 表达式 | ![]() | |||||
| header-name | ![]() | |||||
| evaluate-as-string | ![]() | |||||
| xpath-expression-ref | ![]() | |||||
| 转换器 | ![]() |
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"。
