消息路由

消息路由

本章涵盖了使用Spring Integration路由消息的详细信息。spring-doc.cadn.net.cn

路由

此部分介绍了路由的工作原理。 它包括以下主题:spring-doc.cadn.net.cn

概述

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

Spring Integration 提供了以下路由器:spring-doc.cadn.net.cn

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

以下表格显示了链外路由器可用的配置参数:spring-doc.cadn.net.cn

表 1. 链外路由器
属性 路由器 Header Value Router xpath 路由 payload type router 收件人列表路由 异常类型路由器

apply-sequencespring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

default-output-channelspring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

resolution-requiredspring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

ignore-send-failuresspring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

timeoutspring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

idspring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

auto-startupspring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

input-channelspring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

订单spring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

方法spring-doc.cadn.net.cn

tickmark

refspring-doc.cadn.net.cn

tickmark

表达式spring-doc.cadn.net.cn

tickmark

header-namespring-doc.cadn.net.cn

tickmark

evaluate-as-stringspring-doc.cadn.net.cn

tickmark

xpath-expression-refspring-doc.cadn.net.cn

tickmark

转换器spring-doc.cadn.net.cn

tickmark

以下表格显示了链内部路由器可用的配置参数:spring-doc.cadn.net.cn

表 2. 链内的路由器
属性 路由器 Header Value Router xpath 路由 payload type router 受件人列表路由 异常类型路由器

apply-sequencespring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

default-output-channelspring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

resolution-requiredspring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

ignore-send-failuresspring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

timeoutspring-doc.cadn.net.cn

tickmark
tickmark
tickmark
tickmark
tickmark
tickmark

idspring-doc.cadn.net.cn

auto-startupspring-doc.cadn.net.cn

input-channelspring-doc.cadn.net.cn

订单spring-doc.cadn.net.cn

方法spring-doc.cadn.net.cn

tickmark

refspring-doc.cadn.net.cn

tickmark

表达式spring-doc.cadn.net.cn

tickmark

header-namespring-doc.cadn.net.cn

tickmark

evaluate-as-stringspring-doc.cadn.net.cn

tickmark

xpath-expression-refspring-doc.cadn.net.cn

tickmark

转换器spring-doc.cadn.net.cn

tickmark

自 Spring Integration 2.1 版本起,所有路由器实现的路由器参数已更加标准化。 因此,一些微小的更改可能会破坏基于旧版 Spring Integration 的应用程序。spring-doc.cadn.net.cn

自从 Spring Integration 2.1 版本起,ignore-channel-name-resolution-failures 属性被移除,其行为现在与 resolution-required 属性合并。 此外,resolution-required 属性现在默认值为 truespring-doc.cadn.net.cn

在这些更改之前,resolution-required 属性默认为 false,当没有解析的通道且未设置 default-output-channel 时,消息会无声地被丢弃。 新的行为要求至少有一个已解析的通道,并且默认情况下如果未确定任何通道(或发送尝试不成功),则会抛出一个 MessageDeliveryException 异常。spring-doc.cadn.net.cn

如果确实希望静默丢弃消息,可以设置default-output-channel="nullChannel"spring-doc.cadn.net.cn

常见路由参数

此部分描述了所有路由器参数共有的参数(在本章早期显示的两张表中所有方框都打勾的参数)。spring-doc.cadn.net.cn

链的内部与外部

以下参数适用于所有链内外的所有路由器。spring-doc.cadn.net.cn

apply-sequence

此属性指定是否应在每个消息中添加序列号和大小标头。 此可选属性默认值为falsespring-doc.cadn.net.cn

default-output-channel

如果设置此属性,则该属性提供一个引用,指示如果通道解析无法返回任何通道,则应向哪个通道发送消息。 如果没有提供默认输出通道,则路由器将抛出异常。 如果您希望无声地丢弃这些消息,请将默认输出通道属性值设置为 nullChannelspring-doc.cadn.net.cn

从 6.0 版本开始,设置默认输出通道也会将 channelKeyFallback 选项重置为 false。 因此,不会再尝试根据名称解析通道,而是回退到此默认输出通道——类似于 Java 中的 switch 语句。 如果 channelKeyFallback 被显式设置为 true,则后续逻辑取决于 resolutionRequired 选项:来自键的未解析通道的消息仅当 resolutionRequiredfalse 时才能到达 defaultOutputChannel。 因此,在 defaultOutputChannel 已提供且 channelKeyFallbackresolutionRequired 均设置为 true 的配置下,AbstractMappingMessageRouter 初始化阶段会拒绝该配置。
resolution-required

此属性指定频道名称是否必须始终解析为存在的通道实例。 如果设置为true,则在无法解析通道时会抛出MessagingException。 将该属性设置为false会使任何未解析的通道被忽略。 此可选属性默认值为truespring-doc.cadn.net.cn

仅当指定的resolution-requiredfalse且通道未解析时,消息才会发送给default-output-channel
ignore-send-failures

若设置为true,则向消息通道发送失败将被忽略。 若设置为false,则会抛出一个MessageDeliveryException的异常,并且如果路由解析出多个通道,则后续的通道不会接收到该消息。spring-doc.cadn.net.cn

此属性的行为取决于发送消息的目标Channel的类型。 例如,在使用直接通道(单线程)的情况下,发送失败可能是由下游组件抛出的异常引起的。 然而,在向简单队列