Spring Integration学习笔记:简介

本文是自己学习的总结笔记,主要学习资料如下。

  • https://my.oschina.net/zhzhenqin/blog/86586
  • https://docs.spring.io/spring-integration/docs/current/reference/html/index-single.html#spring-integration-introduction

  • 1、Integration的简介
  • 2、Integration实体
    • 2.1、信息体(Message)
    • 2.2、通道(Message Channel)
    • 2.3、端点(Message Endpoint)


1、Integration的简介

唉,到了新公司,发现公司用的是Spring Integration框架,被迫学习。学习资料实在太少,Integration系列的学习笔记的参考资料基本都在自与官方文档,有些部分都是在翻译文档内容。

Spring Integration也是Spring 全家桶的一员,该框架的设计初衷是为了整合各个系统中的通讯方式。如果现在开发的系统是处在各个系统中间既需要JMS交互,又需要Database/Redis/MongoDB,还需要监听Tcp/UDP等,还有固定的文件转移,分析。还面对着时不时的更改需求的风险。那么,它再适合不过了。


2、Integration实体

Integration整合了很多系统之间传输数据的方式,比如消息队列,Redis等。这些通讯方法在各自的框架中都各有不同,但Spring Integration都将他们抽象化了,所有的通讯方法都可以由一下三个部分组成:信息体(Message),通道(Message Channel),端点(Message Endpoint)。

2.1、信息体(Message)

信息体顾名思义就是用来存储信息的。我们想要传的数据会先包装成信息体格式,然后才在各个点中传输。

信息体主要有两部分组成,一个是信息头(Header),另一个是主体(Payload)。

Spring Integration学习笔记:简介_第1张图片

  • 信息头:信息头用来存储非主体信息,比如索引,或者其他的一些元数据。比如,如果我们要传输的数据是一个文件,那文件名就可以存储在Header之中。或者我们想要传输一份邮件,那发件人,收件人,主体就可以存储在Header之中。
  • 主体:存储主体信息。以上面的为例,主体应该分别存储文件内容和邮件正文。



2.2、通道(Message Channel)

通道是指数据在点到点之间的传输过程,通道是一个消息队列的模式,也就是生产者向通道发送数据,消费者接受数据。管道的意义就是解耦,生产者发送信息后就可以去做其他的事了。

通道是可以缓存数据的。
在这里插入图片描述

这样的通道可以支持『点对点』(point-to-point),也可以支持『订阅-发布』(publish-subscribe)。点对点是生产者只有一个,而消费者也只能有一个;而订阅-发布则允许有多个消费者。

通道除了可以分为『点对点』和『订阅-发布』两种类型,还可以分为可缓存通道(PollabeChannel)和不可缓存通道(SubscribableChanenl)。



2.3、端点(Message Endpoint)

管道连接的两端就是端点。在Integration中,端点是与管道相连,但是要注意,端点不是指业务代码。Integration并不会将信息直接发送给业务代码这一层,因为Integration设计的初衷就是解耦,所以通道的发送端和接收端不可能和某一个具体的代码实体绑定,只能是先发送到端点,然后再根据一些配置信息(比如XML)和具体的业务代码指定具体的业务代码来接收信息。

端点有多个类型。接收信息后我们可以对信息进行过滤、拆分等操作,这些操作都可以用对应类型的端点来完成。

下面是Integration中的端点类型。

  • 转换器(Message Transformer):顾名思义,转换接收到的数据的类型,比如将json文件转换成字符串。当然,这个过程我们也可以去掉或者添加一些数据。

  • 过滤器(Message Filter):过滤信息。

  • 路由器(Message Router):可将信息传递到下一个通道或者多个通道。
    Spring Integration学习笔记:简介_第2张图片

  • 分裂器(Splitter):和路由器基本一致,只是路由器将信息原封不动传给一个或多个通道,而分裂器是将信息分成好几份分别传给对应的通道。

  • 聚合器(Aggregator):与分裂器相反,它是将多个通道的信息聚合成一个信息体然后传给下一个通道。

  • 服务激活器(Service Activtor):激活激活器是在一个普通的Integration模型基础上,将一个服务实体与端点绑定。就像下面的图一样,服务激活器作为一个端点,在输入通道上收到信息后,会在某个时机去调用Message Handler的服务(可能会将Message作为参数),同时Message Handler也会返回结果给服务激活器。Spring Integration学习笔记:简介_第3张图片
    服务激活器必须配置输入通道,我想这是因为服务激活器作为一个触发器,必须要有一个触发条件。这个触发条件就只能是输入通道传信息来激活。没有了输入通道,服务激活器就无法被触发去调用服务,这样就完全失去了意义。

  • 通道适配器(Channel Adaptor):适配器从名字上就能看出,功能是将信息修改成可以适配现有系统。概念与设计模式中的适配器模式一样。比如有外部系统的接收/发送参数的格式是HTTP Request,而我们的是String,那我们就需要一个通道适配器将String转换成HTTP Request发送给连接外部系统通道,或者将HTTP Request转换成String接收外部系统的信息。这一切都是为了能适配外部系统的通讯方式。
    通道适配器和转换器的概念几乎一样,只是通道适配器是对外系统的,而转换器是系统内部的。

你可能感兴趣的:(Spring,Integration)