一、Eureka 概念的理解
1
服务的注册
当项目启动时(eureka
的客户端),就会向
eureka-server
发送自己的
元数据(原始数据)
(运行的
ip
,端口
port
,健康的状态监控等,因为使用的是
http/ResuFul
请求风格),
eureka-server
会在自己内部保留这些元数据
(
内存中
)
。(有一个服务列表)
restful
风
格,以
http
动词的请求方式,完成对
url
资源的操作)
2
服务的续约
项目启动成功了,除了向
eureka-server
注册自己成功,还会
定时
的向
eureka-server
汇报自己,心跳,表示自己还活着。(修改一个时间)
3
服务的下线(主动下线)
当项目关闭时,会给
eureka-server
报告,说明自己要下机了。
4
服务的剔除(被动下线,主动剔除)
当项目超过了指定时间没有向
eureka-server
汇报自己,那么
eureka-server
就会认为此节点死掉了,会把它剔除掉,也不会放流量和请求到此节点了。
二、Eureka 源码分析
了解他的原理 出了问题排查
bug
,优化你的代码
1
Eureka
运作原理的特点
Eureka-server
对外提供的是
restful
风格的服务
以
http
动词的形式对
url
资源进行操作
get post put delete
http
服务
+
特定的请求方式
+
特定的
url
地址
只要利用这些
restful
我们就能对项目实现注册和发现
只不过,
eureka
已经帮我们使用
java
语言写了
client
,让我们的项目只要依赖
client
就能实现注册和发现!
只要你会发起
Http
请求,那你就
有可能
自己实现服务的注册和发现。不管你是什么语言!
三、服务注册的源码分析【重点】
Eureka-client 发起注册请求
1.源码位置
2 如何发送信息注册自己
3 真正的注册 AbstractJerseyEurekaHttpClient
总结:
当
eureka
启动的时候,会向我们指定的
serviceUrl
发送请求,把自己节点的数据以
post请求的方式,数据以
json
形式发送过去。
当返回的状态码为
204
的时候,表示注册成功。
Eureka-server 实现注册+保存
1 接受客户端的请求
com.netflix.eureka.resources.ApplicationResource
2 源码位置
3 接受 client 的注册请求
4 处理请求(注册自己,向其他节点注册)
5 真正的注册自己
服务注册总结
重要的类:
DiscoveryClient
里面的
register()
方法完后注册的总体构造
AbstractJerseyEurekaHttpClient
里面的
register()
方法具体发送注册请求(post
)
InstanceRegistry
里面
register()
方法接受客户端的注册请求
PeerAwareInstanceRegistryImpl
里面调用父类的
register()
方法实现注册
AbstractInstanceRegistry
里面的
register()
方法完成具体的注册保留数据到
map
集合保存服务实例数据的集合:
第一个
key
是应用名称(全大写)
spring.application.name
Value
中的
key
是应用的实例
id
eureka.instance.instance-id
Value
中的
value
是 具体的服务节点信息