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

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

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

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


image.png


接口: 接口有哪些呢?

上文已经说了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数据格式


image.png

拿注册接口来说:你只需启动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 源码的调试阅读之旅了。

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


相关文章
|
5月前
|
Java 数据库连接 程序员
从头到尾手把手教你搭建阅读Mybatis源码的环境(程序员必备技能)
从头到尾手把手教你搭建阅读Mybatis源码的环境(程序员必备技能)
167 0
|
JavaScript 程序员 API
程序员为什么会在开发中阅读源码?
作为程序员的大家想必都会在开发的时候,去阅读源码。在实际开发中,开发者经常需要阅读和理解源代码,阅读源码是一种非常有用的技能,它可以帮助程序员更好地了解代码、解决问题、学习新技术和提高编码能力。阅读源码的过程实质上是对软件构建技术和架构深度的一种持续学习和理解。阅读源码可以揭示代码的内在逻辑,这被看作是对技术深度理解的一种体现,它能提高我们对技术的理解程度。结合阅读《Node 中的 AsyncLocalStorage 的前世今生和未来》这篇文章之后,我深刻体会到了作为开发者阅读源码的重要性和必要性。通过阅读这篇文章,我对 AsyncLocalStorage 的实现原理和使用方式有了更深入的理解
187 3
程序员为什么会在开发中阅读源码?
|
设计模式 安全 关系型数据库
2w行代码、200个实战项目,助你修炼5大编程基本功
2w行代码、200个实战项目,助你修炼5大编程基本功
139 0
|
IDE 程序员 Go
如何借助工具快速生成代码?初学者容易踩的坑有哪些?
这篇内容继续分享重点内容:如何借助工具快速生成代码?初学者容易踩的坑有哪些?
163 0
如何借助工具快速生成代码?初学者容易踩的坑有哪些?
最近的踩坑分享 | 技术文档和需求拆解
最近的踩坑分享 | 技术文档和需求拆解
113 0
最近的踩坑分享 | 技术文档和需求拆解
|
Java 数据库
开发踩坑之判等问题
开发过程中避免不了判等问题?你在判等的过程中有没有遇到过坑呢?那么你是怎么解决的?快来看看我们是不是一样。
107 1
开发踩坑之判等问题
|
消息中间件 设计模式 存储
丁威: 优秀程序员必备技能之如何高效阅读源码(二更)
丁威: 优秀程序员必备技能之如何高效阅读源码(二更)
丁威: 优秀程序员必备技能之如何高效阅读源码(二更)
下一篇
无影云桌面