不要把“间歇性踌躇满志,持续性混吃等死”活成一种习惯
一、为什么写这篇文章二、基础知识1.寻根问码2.Jersey 框架(熟悉而又陌生的Contoller)3.Google的guava框架(瓜娃子)4.HTTP通信5.EurekaServer的设计思想6.InstanceInfo域值(DTO)三、总结
一、为什么写这篇文章
因为公司用的是SpringCloud,所以闲暇之余,我尝试去阅读源码,了解Springcloud底层的工作原理。回想起当时翻阅各种博客,一大堆断点跟代码,经常搞得头大。
现在在回想起来,无方向的乱撞源码,虽有会有收获,但是效率不高。
基于此种想法,我想到了写一篇关于阅读Springcloud
源码必备的基础知识,希望会对你有所启发。
二、基础知识
1.寻根问码
我们平时用的Eureka
项目,是Spring Cloud Netflix
项目下的一个子项目,而Spring Cloud Netflix
项目是对Netflix OSS
组件的封装。Netflix公司开源一套分布式服务框架组件套包, 他们的项目地址在github.com/Netflix
也就是说,核心功能在根上。
2.Jersey 框架(熟悉而又陌生的Contoller)
Springcloud
是典型的Servlet
应用,服务端与客户端之间通过Restful接口交互。
EurekaSever
与EurekaClient
之间也是跟我平时做系统之间交互差不多。我们写了这么多Controller,业务系统之间怎么通过接口交互,应该很明确了。
与我们熟悉的代码不同的是:
- 我们用的是
SpringMVC
框架, 写的是Controller
. Eureka
用的是Jersey
框架,Jersey
框架里类Controller的组件叫做ApplicationResource
概念。
接口包:
- 我们通常定义一个 xxx.controller包 ,里面存放的就是我们的接口
- Eureka有个resources包,里面存放的就是EurekaServer的对外的接口
com.netflix.eureka.resources
包。
接口: 接口有哪些呢?
上文已经说了Eureka的根在github.com/Netflix/eur…
所以从其wiki文档中,你会看到这样一个目录Eureka-REST-operations,
EurekaServer的所有API接口基本就在这里了。这里列出几个更多请去项目wiki文档看
操作 | 接口 | 说明 |
注册实例 | POST /eureka/v2/apps/appID | 数据格式JSON/XML 注册成功码Code: 204 on success |
删除实例 | DELETE /eureka/v2/apps/appID/instanceID | HTTP Code: 200 on success |
而且文档还贴切的给出了XML数据格式
拿注册接口来说:你只需启动EurekaSever
服务,通过PostMan
工具调用接口就注册了一个实例信息。
和我们顺业务系统从Controller接口看起一样,
你顺着这个包下的接口看到的就是整个业务的入口了
。我想这也是我们最熟悉的方式了吧
3.Google的guava框架(瓜娃子)
Eureka里用到的很多工具类,都是来自Google的guava项目。
列如:
- 缓存:Eureka里面使用了很多缓存都是使用Google的guava缓存构建的。
4.HTTP通信
EurekaSever
与EurekaClient
之间的通信协议是HTTP.
我们常用的Resttemplate发起一个Post/GET请求。
EurekaClient
在与EurekaSever
通信时,用的是一个叫做EurekaTransport
的HTTP工具。
陌生而又熟悉的通信
5.EurekaServer的设计思想
- 读写分离思想(缓存分级):当出现频繁的读与写时,此时想到的应该就是读写分离思想。EurekaSever也是这么做的
- 定时刷新
- 定时驱逐
- STW
6.InstanceInfo域值(DTO)
EurekaSever
与EurekaClient
之间的通信的基本单位是InstanceInfo
。
客户端组装一个代表自己的信息的InstanceInfo
, 注册到EurekaSever
,EurekaSever
将这个InstanceInfo
缓存起来,
就好比我们多系统中的DTO的概念。其实专业点叫做域值更加贴切。
三、总结
不知道你是否已经从Eureka客户端与服务端中,看到了你熟悉的的业务系统的样子
知道了这些,你完全可以拿起你的PostMan
工具,使用官方给出的数据结构,开始EurekaSever
,EurekaClient
源码的调试阅读之旅了。
框架之间大都相通之处,往往在开始,就了解这种相通,然后再去阅读,会事半功倍。