- 学习掌握 SpringCloud 服务的注册发现流程原理,心跳机制,负载均衡
- go 语言项目练手
- 服务注册到 consul 是通过 HTTP 接口完成
- SpringCloud 应用启动的时候把自己的服务名,id 通过HTTP注册接口注册到对应的 consul 机器上
- 注册完之后会调用 consul 的注册列表接口,判断自己作为一个服务是否已经注册成功
- 当代码里面有用到 feign 调用的时候,要去检查feign调用的提供者是否已经注册,有的话则注册发现流程完成
- SpringCloud feign 调用的过程
- 如果feign调用里面使用的是服务名,会根据这个服务名去consul检查是否已经注册了该服务
- consul 返回该服务名对应的所有的机器ip,端口,是一个列表
- SpringCloud 把该服务名对应的地址列表保存到本地,并且定期刷新,防止该服务的有些实例的地址更新
- 每次feign 调用的时候,根据服务名进行调用,底层再把服务名替换成列表里的一个地址
- 最终是根据ip, 端口进行调用的,并且是客户端的负载均衡逻辑,负载策略包含轮询,权重,最少连接
- consul 的服务注册发现是通过 HTTP 接口实现的
- consul 的服务注册是保存在一个 map 里面,key是服务id,value 是一个包含该服务重要信息(地址,端口)结构体
- SpringCloud 服务定期获取刷新一个服务的信息时,consul 需要返回该服务的地址列表信息
- consul 保持对已经注册服务的心跳机制,也是通过http接口实现的
- 定期发起对每个已经注册的服务的全部实例发起请求 http://ip:port/actuator/health
- 返回 status : up 就是表明该服务正常,如果不是,就是该服务已经挂掉,需要在实例列表里面剔除,俗称下线
- 经过实测是可以正常调用的
- 因为服务从注册中心把提供者的信息拉取下来后会保存在本地,因此并不是每次调用都去注册中心拿信息
- 服务能正常访问,但是项目会开始报错,连接不到注册中心,并且会保持重连机制