消息路由
消息路由
本章涵盖了使用Spring Integration路由消息的详细信息。
路由
此部分介绍了路由的工作原理。 它包括以下主题:
概述
路由器在许多消息架构中是关键元素。 它们从一个消息通道消费消息,并根据一组条件将每个消费的消息转发到一个或多个不同的消息通道。
Spring Integration 提供了以下路由器:
路由实现共享许多配置参数。 然而,不同路由器之间存在一些差异。 此外,配置参数的可用性取决于路由器是在链内还是链外使用。 为了提供一个快速概览,所有可用属性在下面两个表格中列出。
以下表格显示了链外路由器可用的配置参数:
| 属性 | 路由器 | Header Value Router | xpath 路由 | payload type router | 收件人列表路由 | 异常类型路由器 |
|---|---|---|---|---|---|---|
apply-sequence |
|
|
|
|
|
|
default-output-channel |
|
|
|
|
|
|
resolution-required |
|
|
|
|
|
|
ignore-send-failures |
|
|
|
|
|
|
timeout |
|
|
|
|
|
|
id |
|
|
|
|
|
|
auto-startup |
|
|
|
|
|
|
input-channel |
|
|
|
|
|
|
订单 |
|
|
|
|
|
|
方法 |
|
|||||
ref |
|
|||||
表达式 |
|
|||||
header-name |
|
|||||
evaluate-as-string |
|
|||||
xpath-expression-ref |
|
|||||
转换器 |
|
以下表格显示了链内部路由器可用的配置参数:
| 属性 | 路由器 | Header Value Router | xpath 路由 | payload type router | 受件人列表路由 | 异常类型路由器 |
|---|---|---|---|---|---|---|
apply-sequence |
|
|
|
|
|
|
default-output-channel |
|
|
|
|
|
|
resolution-required |
|
|
|
|
|
|
ignore-send-failures |
|
|
|
|
|
|
timeout |
|
|
|
|
|
|
id |
||||||
auto-startup |
||||||
input-channel |
||||||
订单 |
||||||
方法 |
|
|||||
ref |
|
|||||
表达式 |
|
|||||
header-name |
|
|||||
evaluate-as-string |
|
|||||
xpath-expression-ref |
|
|||||
转换器 |
|
|
自 Spring Integration 2.1 版本起,所有路由器实现的路由器参数已更加标准化。 因此,一些微小的更改可能会破坏基于旧版 Spring Integration 的应用程序。 自从 Spring Integration 2.1 版本起, 在这些更改之前, 如果确实希望静默丢弃消息,可以设置 |
常见路由参数
此部分描述了所有路由器参数共有的参数(在本章早期显示的两张表中所有方框都打勾的参数)。
链的内部与外部
以下参数适用于所有链内外的所有路由器。
apply-sequence-
此属性指定是否应在每个消息中添加序列号和大小标头。 此可选属性默认值为
false。 default-output-channel-
如果设置此属性,则该属性提供一个引用,指示如果通道解析无法返回任何通道,则应向哪个通道发送消息。 如果没有提供默认输出通道,则路由器将抛出异常。 如果您希望无声地丢弃这些消息,请将默认输出通道属性值设置为
nullChannel。从 6.0 版本开始,设置默认输出通道也会将 channelKeyFallback选项重置为false。 因此,不会再尝试根据名称解析通道,而是回退到此默认输出通道——类似于 Java 中的switch语句。 如果channelKeyFallback被显式设置为true,则后续逻辑取决于resolutionRequired选项:来自键的未解析通道的消息仅当resolutionRequired为false时才能到达defaultOutputChannel。 因此,在defaultOutputChannel已提供且channelKeyFallback和resolutionRequired均设置为true的配置下,AbstractMappingMessageRouter初始化阶段会拒绝该配置。 resolution-required-
此属性指定频道名称是否必须始终解析为存在的通道实例。 如果设置为
true,则在无法解析通道时会抛出MessagingException。 将该属性设置为false会使任何未解析的通道被忽略。 此可选属性默认值为true。仅当指定的 resolution-required为false且通道未解析时,消息才会发送给default-output-channel。 ignore-send-failures-
若设置为
true,则向消息通道发送失败将被忽略。 若设置为false,则会抛出一个MessageDeliveryException的异常,并且如果路由解析出多个通道,则后续的通道不会接收到该消息。此属性的行为取决于发送消息的目标
Channel的类型。 例如,在使用直接通道(单线程)的情况下,发送失败可能是由下游组件抛出的异常引起的。 然而,在向简单队列