看SpringCloudEureka源码前懂得这些知识事半功倍

870 阅读4分钟

不要把“间歇性踌躇满志,持续性混吃等死”活成一种习惯

一、为什么写这篇文章二、基础知识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接口交互。

EurekaSeverEurekaClient 之间也是跟我平时做系统之间交互差不多。我们写了这么多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通信

EurekaSeverEurekaClient 之间的通信协议是HTTP.

我们常用的Resttemplate发起一个Post/GET请求。

EurekaClient 在与EurekaSever 通信时,用的是一个叫做EurekaTransport的HTTP工具。

陌生而又熟悉的通信

5.EurekaServer的设计思想

  • 读写分离思想(缓存分级):当出现频繁的读与写时,此时想到的应该就是读写分离思想。EurekaSever也是这么做的
  • 定时刷新
  • 定时驱逐
  • STW

6.InstanceInfo域值(DTO)

EurekaSeverEurekaClient 之间的通信的基本单位是InstanceInfo

客户端组装一个代表自己的信息的InstanceInfo, 注册到EurekaSeverEurekaSever 将这个InstanceInfo缓存起来,

就好比我们多系统中的DTO的概念。其实专业点叫做域值更加贴切。

三、总结

不知道你是否已经从Eureka客户端与服务端中,看到了你熟悉的的业务系统的样子

知道了这些,你完全可以拿起你的PostMan工具,使用官方给出的数据结构,开始EurekaSever,EurekaClient 源码的调试阅读之旅了。

框架之间大都相通之处,往往在开始,就了解这种相通,然后再去阅读,会事半功倍。


如果本文任何错误,请批评指教,不胜感激 ! 如果觉得文章不错,点个赞

欢迎添加我微信,拉你入伙,聊点源码

在这里插入图片描述
在这里插入图片描述