zoukankan      html  css  js  c++  java
  • 【转】 SpringCloudAlibaba--03——feign

    【转】 SpringCloudAlibaba--03——feign

     参考地址:蚂蚁课堂视频

    * 本地负载均衡和Nginx的区别

    本地负载均衡器基本的概念:我们的消费者服务从我们的注册中心获取到集群地址列表,缓存到本地,让后本地采用负载均衡策略(轮训、随机、权重等),实现本地的rpc远程的。

    那么,本地负载均衡器有哪些?可以自己写(比如那个轮询算法)、Ribbon(SpringCloud第一代的)、LoadBalancerClient(SpringCloud自己研发,第二代的)

    Nginx属于服务器负载均衡,应用于Tomcat/Jetty服务器等,而我们的本地负载均衡器,应用于在微服务架构中rpc框架中,rest、openfeign、dubbo。

    本地负载均衡器是从注册中心获取到集群地址列表,本地实现负载均衡算法,既本地负载均衡器。

    意思就是,先去Nginx 上负载均衡,拿到服务以后,再负载均衡到服务器上,请求到的服务

    之前手写的轮询算法实现的负载均衡,现在用@LoadBalanced 注解 + RestTemplate 实现负载均衡

      /**
         * 基于Ribbon实现本地负载均衡
         *
         * @return
         */
        @RequestMapping("/orderToRibbonMember")
        public Object orderToRibbonMember() {
            String result = restTemplate.getForObject("http://meitemayikt-member/getUser", String.class);
            return "订单调用会员返回结果:" + result;
        }

    这样可以拿到注册中心的地址,注意别忘记在主启动类的RestTemplate 加上注解:

        /**
         * 加上LoadBalanced 注解就可以实现我们的本地负载均衡
         *
         * @return
         */
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }

    这个根本不用引入Ribbon 的jar包,为啥嘞?

    为什么只需要加入@LoadBalanced 注解 就直接可以负载均衡呢?

    SpringCloud第一代中使用Ribbon、SpringCloud第二代中直接采用自研发loadbalancer即可,默认使用的Ribbon。

    @LoadBalanced 注解的源码:

    package org.springframework.cloud.client.loadbalancer;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    import org.springframework.beans.factory.annotation.Qualifier;
    
    @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @Qualifier
    public @interface LoadBalanced {
    }

    点进去可以看到,用的是LoadBalancerClient,底层默认原理是调用ribbon实现客户端负载均衡器。

    等同于:

      // 先注入LoadBalancerClient
      @Autowired
      private LoadBalancerClient loadBalancerClient;
      /**
         * 根据loadBalancerClient 实现客户端负载均衡
         *
         * @return
         */
        @RequestMapping("/loadBalancerClientMember")
        public Object loadBalancerClientMember() {
            ServiceInstance result = loadBalancerClient.choose("meitemayikt-member");
            return result;
        }

    LoadBalancerClient为什么就可以调用到Ribbon ??

    我们可以点进去 .choose 方法,发现它是个接口,是个父类!我们点进去他的子类,就可以看到:

     这个RibbonLoadBalancerClient 实现了LoadBalancerClient 这个接口,所以LoadBalancerClient 可以调用到Ribbon

    举一反三,如果我们自己去写一个负载均衡器,只要实现LoadBalancerClient 这个接口就可以了

    OpenFeign客户端

    SpringCloud 第一代使用的是Feigin 客户端,第二代使用的是OpenFeign 客户端。

    OpenFeign是一个Web声明式的Http客户端调用工具,提供接口和注解形式调用。底层封装的HttpClient 技术。

    Feign 客户端从16年到现在一直都没有更新,而OpenFeign 一直在更新。  

    Feigin 是netflix 写的,OpenFeign 是SpringCloud 自己写的。  

    OpenFeign 整合项目

    创建微服务项目:

    mayikt-opefeign-parent---父工程

    ---mayikt-service-api----微服务Api接口层

    ----mayikt-member-service-api

    ----mayikt-order-service-api

    ---mayikt-service-impl----微服务Api实现层

    ----mayikt-member-service-impl

    ----mayikt-order-service-api

    这是微服务架构的基本样式,最大的优点能够能够对Feign 实现复用机制。

    服务名称 命名时候不可以使用下划线 _ ,不然OpenFeign 会报错

  • 相关阅读:
    认识Java数组(一)
    Java之定时任务详解
    Java三大特征之多态(三)
    Java三大特征之继承(二)
    Java三大特征之封装(一)
    eclipse常用快捷键汇总
    JDK动态代理
    Java代理模式——静态代理模式
    CRISPR/Cas9基因敲除原理及实验建议
    MicroRNA 详解
  • 原文地址:https://www.cnblogs.com/Javastudy-note/p/13818354.html
Copyright © 2011-2022 走看看