当前位置 博文首页 > 蜗牛为梦想而生H:07-负载均衡之OpenFeign

    蜗牛为梦想而生H:07-负载均衡之OpenFeign

    作者:[db:作者] 时间:2021-09-07 19:19

    1.前言:ribbon的问题

    使用ribbon时,我们发现 Robbin确实可以做到负载均衡,也可以修改负载均衡算法 很灵活。
    但是使用Ribbon时我们发现,我们还需要拼接URL路径,这很显然不是很优雅,我们开发是面向接口面向对象开发,而不是面向URL拼接开发,OpenFeign 就是在Ribbon的基础上,通过接口+注解的方式 实现负载均衡的 ?

    2. feign的过时说明

    3. openFeign的使用步骤

    3.1. 消费者端添加依赖

       <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

    3.2. 消费者端添加接口

    注意点:
    ?? ?映射路径要和提供者一致
    ?? ?返回值类型要和提供者一致
    ?? ?参数要和提供者一致??
    ?? ?如果返回值是ResponseEntity? 必须要有泛型

    ?

    3.3. 消费者主配置类修改

    3.4. 消费者控制器修改

    4. 项目改造

    在上面的案例中,我们把OpenFeign的接口写在了消费者端,那么如果实际开发当中,这个提供者服务不是你写的,他的服务名称以及接口的请求路径你怎么知道呢(除非查看api文档自己一点一点的写),很明显不够优雅,所以在实际当中,这些OpenFeign的接口 应该有提供者编写,消费者只需要依赖调用即可

    4.1. 新建接口工程?

    4.2. 添加依赖

    <dependencies>
        <!--openFeign依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--entity依赖-->
        <dependency>
            <groupId>com.sm.cn</groupId>
            <artifactId>Cloud-Entity</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    4.3.编写接口

    4.4. 消费者端添加依赖

    <dependencies>
            <dependency>
                <groupId>com.sm.cn</groupId>
                <artifactId>Cloud-Entity</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--Alibaba nacos服务依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.sm.cn</groupId>
                <artifactId>Nacos-Provider-openFeign</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>

    4.5. 提供者修改代码实现接口

    4.6.测试访问:localhost:9300/getPerson

    5. 超时问题

    5.1. 提供者延迟

    5.2. 浏览器访问提供者

    5.3. openFeign访问提供者

    5.4. 修改openFeign的时长:application.yml

    ## 因为openFeign的默认请求时长是1秒 如果一秒还没有相应 直接返回错误信息
    ?
    ## 在消费端application.yml中添加
    ?
    feign:
      client:
        config:
          employee-provider: ## 提供者名称
            connectTimeout: 5000
            readTimeout: 5000
            
    ## 或者所有的服务都设置默认的时间
    feign:
      client:
        config:
          default: ## 使用default可以设置 所有的提供者的时间
            connectTimeout: 5000
            readTimeout: 5000
            
            
     ## 或者使用如下方式解决
    ribbon:
      ConnectTimeout: 5000
      ReadTimeout: 5000

    5.5.测试

    6. 日志问题

    6.1. 问题描述

    当我们使用OpenFeign调用提供者微服务时,控制台没有任何打印,虽然说OpenFeign做了负载均衡 但是由于我们调用的是接口中的方法 所以看不到到底有没有做负载均衡 很显然不够优雅

    6.2. 官方说明

    6.3. 消费者配置修改?

    6.4.测试

    cs