nacos + openFeign 服务注册&发现工作原理

本篇博客通过本地 debug 的方式,详细介绍 nacos + openFeign 服务注册&发现工作原理。

篇幅有点长,内容如下:

  • 前置准备

1.1. 版本

1.2. 背景:1.4.2 是截止写这篇博客当天 2021-09-12 最新的 1.x 版本。截图为证

1.3. 下载源码

1.4. 导入到 idea

1.5. naocs 服务端日志配置

1.6. nacos 服务端默认日志文件配置 debug 截图

1.7. nacos 服务端部署时,启动文件外部指定日志配置文件。以 2.0.2 版本为例,各个版本都一样

1.8. nacos.xml 输出级别全部改为 DEBUG 

1.9. nacos-server 启动时,观察日志可以看到服务注册相关的控制器

1.10. nacos 客户端日志配置

  • 带着问题找答案

2.0. nacos 服务注册流程图

2.1. nacos-client 是如何注册到 nacos-server 的?

2.2. nacos-server 端服务注册怎么实现的?

2.3. nacos-client 如何保持心跳的?

- 客户端部分

- 服务端部分

2.4. nacos-server 剔除不健康 nacos-client 的机制是什么?

2.5.openFeign client 端调用 server 端时,如何拿到实际 server 端的 ip+port 的?

- 准备

---- 纯净版代码

---- 导入 idea

---- 从场景的角度切入说明

---- postman 地址

---- postman body

---- 调用链说明

---- 流程图

详解共 19 步

2.6. openFeign client 端如何实现本地的micro service server 信息 [HostReactor.serviceInfoMap (ip+port) ]与 nacos-server  保持实时同步的?

2.7. 打印日志为证:(日志打印语句见:2,5小节第19步)

 

  • 前置准备

1.1. 版本

nacos: 1.4.2

1.2. 背景:1.4.2 是截止写这篇博客当天 2021-09-12 最新的 1.x 版本。截图为证

1.3. 下载源码

$ git clone https://github.com/alibaba/nacos.git
$ cd nacos/
$ git checkout 1.4.2

1.4. 导入到 idea

1.5. naocs 服务端日志配置

META-INF/logback/nacos.xml

1.6. nacos 服务端默认日志文件配置 debug 截图

1.7. nacos 服务端部署时,启动文件外部指定日志配置文件。以 2.0.2 版本为例,各个版本都一样

1.8. nacos.xml 输出级别全部改为 DEBUG 

1.9. nacos-server 启动时,观察日志可以看到服务注册相关的控制器

 1.10. nacos 客户端日志配置

 2.0. nacos 服务注册流程图

 

 2.1. nacos-client 是如何注册到 nacos-server 的?

代码入口:

第一步

第二步

 

 第三步

 

第四步

客户端部分完成!

2.2. nacos-server 端服务注册怎么实现的?

代码入口

第一步

第二步

第三步

 

第四步

   服务端部分完成!

2.3. nacos-client 如何保持心跳的?

客户端部分

  

服务端部分

2.4. nacos-server 剔除不健康 nacos-client 的机制是什么?

Nacos中临时实例基于心跳上报方式维持活性,基本的健康检查流程基本如下:Nacos客户端会维护一个定时任务,每隔5秒发送一次心跳请求,以确保自己处于活跃状态。
Nacos服务端在15秒内如果没收到客户端的心跳请求,会将该实例设置为不健康,在30秒内没收到心跳,会将这个临时实例摘除。

 

2.5.openFeign client 端调用 server 端时,如何拿到实际 server 端的 ip+port 的?

准备

纯净版代码
导入 idea

纯净版代码

https://gitee.com/xiluhua/cloudalibaba-feign-server.git
https://gitee.com/xiluhua/cloudalibaba-feign-client.git

导入 idea

从场景的角度切入说明

客户来前端系统(postman)查订单。
feign-client,后台网关系统接到请求,通过 openFeign 调用 micro service server: feign-server 获取订单数据

postman 地址

http://localhost:8080/consumer/payment/get/dfd57039de7841eb9dfd066b4065fe01

postman body

{
    "txid": "0c340e229d444200b3d4c19fd027d434",
    "type": "1",
    "req": {
        "name": "张是三",
        "age": 11
    }
}

调用链说明

流程图

 

 

 代码入口

第一步 , 请看上图

第二步

 第三步

 第四步

 第五步

 第六步

 第七步

 第八步

 第九步

 第十步. 手动重新刷新初始化 spring 容器

 

 第11步. 初始化 RibbonLoadBalancer

 第12步. DynamicServerListLoadBalancer 动态服务列表负载均衡器,更新服务列表

 

 

第13步

 

 

第14步. 获取 micro service server 实例列表

 

 

第15步

 

 

第16步

 

 

 第17步

 

 

第18步

 

 

第19步

 完成!

2.6. openFeign client 端如何实现本地的 micro service server 信息 [HostReactor.serviceInfoMap (ip+port) ]与 nacos-server  保持实时同步的?

这部分其实在2.5小节的第16步,已经说明。

 2.7. 打印日志为证:(日志打印语句见:2.5小节第19步)

完成! 

 

posted @ 2021-09-12 16:04  xiluhua  阅读(2440)  评论(0编辑  收藏  举报