zoukankan      html  css  js  c++  java
  • 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步)

    完成! 

  • 相关阅读:
    201521123084 《Java程序设计》第4周学习总结
    201521123084 《Java程序设计》第3周学习总结
    C语言博客作业—数据类型
    c语言博客作业-函数
    java课程设计——猜数游戏个人博客
    java课程设计-猜数游戏
    201521123092《java程序设计》第14周学习总结
    201521123092《java程序设计》第十三周学习总结
    201521123092《java程序设计》第12周学习总结
    201521123092《java程序设计》第十一周学习总结
  • 原文地址:https://www.cnblogs.com/xiluhua/p/15258986.html
Copyright © 2011-2022 走看看