一、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 是 具体的服务节点信息