• Ribbon是怎么重构URL的?


    Ribbon是怎么重构URL的?

    当ribbon选择合适的请求后,就会发送rest请求,下面就就下面,请求的过程中url是怎么变化的,是怎么把服务名换成ip:port的

    demo的代码如下:

        @RequestMapping("/save")
        public String save(int productId) {
            String str = restTemplate.getForObject("http://serviceA/product/find?id="+productId, String.class);
            System.out.println(str);
            return str;
        }
    

    由于前面整合ribbon的请求,会经过拦截器进行改写,所以先在拦截器那里,打一个断点,结果如下图:

    image-20210927231243608

    RibbonLoadBalancerClient#execute

    image-20210927232617522

    image-20210927232726911

    此处的this.clientFactory的类型为SpringClientFactory,它的子类实现了ApplicationContextAware,应该可以在容器中拿到bean对象,获取ServiceA对应的ApplicationContext容器,然后再个容器中获取对应的RibbonLoadBalancerContext这个bean。走到这步T returnVal = request.apply(serviceInstance);

    点进去看看,

    image-20210927233050503

    看这个类的名字是服务请求的装饰器,应该是对什么做了包装,在深入看看

    image-20210927233233629

    里面对了uri的获取进行了重新,在继续往下,到执行的方法,果然对上面的uri方法进行了调用

    image-20210927233352086

    直接查看uri,是个什么,发现在这步已经直接得出转化后的uri了,所以就是在这里进行转换的。

    image-20210927233450057

    为了看一下到底是在哪一步进行转化的,那我们就F5进去,

    image-20210927233708195

    在LoadBalancerContext的reconstructURIWithServer方法,开始进行替换,reconstruct的意思就是重造的意思,顾名思义

    image-20210927233956194

    拼上原先的query和参数就得出新的uri,然后再去请求。

    image-20210927234302987

  • 相关阅读:
    python开发第一篇:初识python
    python开发第二篇 :python基础
    nfs下的exportfs命令和nfs客户端重新挂载
    centos7安装epel源
    vim查找替换
    keepalive基础知识
    nginx基本配置各个参数说明
    centos7下搭建nfs服务
    systemctl命令
    mariadb入门
  • 原文地址:https://www.cnblogs.com/dalianpai/p/15345954.html
Copyright © 2020-2023  润新知