学习一个新的技术,最重要的应该是对这个技术(架构、体系)中一些关键概念的理解,只有正确理解了这些概念,才能顺利地掌握这个技术。

下面就个人在学习Spring Integration时的一些个人理解罗列如下,感兴趣的DX可以一起讨论。

 

MessageEndpoint就是一个管道、过滤器架构中的过滤器。

这里的所谓过滤器,是在两个管道之间的一个装置,对输入信息进行处理,然后将处理结果输出到输出管道;

一个过滤器可以是一个Service 的一个方法,该方法的输入参数就是输入管道中的数据,而输出结果就是向输出管道中的输出;

 

但是Channel中的数据都是以Message类型封装的,而方法的参数则是普通的Java类型,因此需要有一个Transformer来进行格式转换。

 

有时候不是所有输入管道中的数据都要处理,所以就需要“条件过滤器”(这个过滤器是个微观过滤器,是上面的管道、过滤器架构中过滤器的一个子零件)进行判断选择;(根据消息,是否处理)

 

有时候管道中的输入比较杂,比如是油水混合物,过滤装置需要将油和水分别输出到不同的输出管道,因此,就不能使用静态的定义输入、输出管道的方式,而应该采用“路由”的概念。在Service的方法中,还是按照完全不知道外部环境(消息、管道等)的方式来处理,而由自定义的“Router”将方法的输出定位到对应的输出管道;(根据消息,选择管道)

 

如果输入管道中的数据太复杂,需要简化,我们可以使用“Spliter”将复杂的Message输入,拆分成小的Message,然后再将所有拆分后的消息发送到输出管道。(固定管道,对消息进行操作)。形象上,不是"→<", 而是"——  →  -------"

 

与Spliter对应的,会有一个Aggrigator, 是其反过程,从技术上要比Spliter复杂,因为要维持状态,要等待所有的子消息都接收到,成功组装为一个完整的大的消息,所以,会有timeout相关设定。

 

Channel Adapter 管道适配器是用来在不同的Transport介质之间做匹配的一个适配器。比如,电线中传输的是电能,如果需要将电能转换为光能继续传输,就需要有一个转换器,将输入管道(电线)中的数据(电),进行格式转换,转换为输出管道(光纤)可以承载的格式(光)。

 

在Spring Integration中,Adapter是一个很重要的部分,用来将业务代码与整合代码进行隔离,一般是整合的入口。如果没有request-channel,会定义一个MessageSource,一般是一个方法。缺省的channel就是其id

 

Messaging Gateways 消息网关,基本上就是Facade模式,业务应用系统通过该消息网关来访问底层消息系统,该网关将消息系统复杂的底层机制进行了封装,只简化为几个常用的api,比如发送消息、接收消息、发送并接收消息(发送后等待响应,直到接收到响应之后输出返回)。注意:这里的消息网关并不是一个对象,而是一个方法。而在Spring中定义的<gateway .../>才是指的包含消息网关方法的bean. 注意:Send操作是向request-channel中写数据,receive是从reply-channel中接收。

GitHub 加速计划 / in / integration
6
0
下载
HACS gives you a powerful UI to handle downloads of all your custom needs.
最近提交(Master分支:3 个月前 )
8d999fb4 5 个月前
3cfbe3da Co-authored-by: Erik Montnemery <erik@montnemery.com> 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐