其他分享
首页 > 其他分享> > SpringCloud-2.0 (9. 负载均衡 - OpenFeign)

SpringCloud-2.0 (9. 负载均衡 - OpenFeign)

作者:互联网

上一篇 :8. 负载均衡 - Ribbon

下一篇 :10. 服务降级 - Hystrix - 引出问题

文章目录

声明:原文作者:CSDN:yuan_404

1 . 概述

1.1 是什么

Feign 也支持可插拔式的编码器和解码器。

Feign 和 Open Feign 本质差不多,只不过 Open Feign 是 SpringCloud 对 Feign 进行了封装,使其支持了 SpringMVC 标准注解和 HttpMessageConverters。

1.2 能干嘛

Feign能于什么

Feign集成了Ribbon

1.3 Feign和OpenFeign两者区别

  • Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端
  • Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。
  • Feign的使用方式是:使用Feign的注解定义接口,调用这个接口 ,就可以调用服务注册中心的服务
  • OpenFeign是 Spring Cloud 在 Feign 的基础上支持了 SpringMVC 的注解,如 @RequesMapping 等等。
  • OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

2 . OpenFeign 基本使用

  1. 新建模块 : cloud-consumer-order-Feign-80

  2. 修改 POM

     <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
         <dependency>
            <groupId>com.demo.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
    
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
  3. 编写 YML

    server:
      port: 80
    
    eureka:
      client:
        register-with-eureka: false
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka
    
    
  4. 编写主启动类

    @SpringBootApplication
    // Feign 客户端的注解
    @EnableFeignClients
    public class FeignMain80 {
        public static void main(String[] args) {
            SpringApplication.run(FeignMain80.class, args);
        }
    }
    
    
  5. 业务类

3 . 超时控制

3.1 是什么

3.2 演示超时

  1. 修改 Provider - 8001 的 Controller

    故意写一个暂停的语句

    /** 用于测试超时设置 */
    @GetMapping(value = "/payment/feign/timeout")
    public String timeOut(){
        // 休眠 3 秒
        try { 
            TimeUnit.SECONDS.sleep(3); 
        }catch (Exception e) {
            e.printStackTrace();
        }
        return serverPort;
    }
    
    
  2. 修改 Consumer - Feign - 80 的 Service

    @GetMapping(value = "/payment/feign/timeout")
    public String paymentFeignTimeout();
    
    
  3. 修改 Consumer - Feign - 80 的 Controller

    @GetMapping(value = "/provider/payment/feign/timeout")
    public String paymentFeignTimeout(){
        return feignService.paymentFeignTimeout();
    }
    
    
  4. 启动项目测试

    先访问一下 Provider

    访问 Consumer

    提示超时

3.3 配置超时控制

  1. 配置 YML

    # 设置 Feign 客户端超时时间
    ribbon:
      # 以下单位都是 ms 毫秒
      # 指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
      ReadTimeout:  5000
      # 指的是建立连接后从服务器读取到可用资源所用的时间
      ConnectTimeout: 5000
    
    
  2. 重启项目测试

4 . 日志打印功能

4.1 是什么

4.2 日志级别

4.3 使用

  1. 建立 Config 包,配置日志 Bean

    @Configuration
    public class FeignConfig {
        @Bean
        Logger.Level feignLoggerLevel(){
            return Logger.Level.FULL;
        }
    }
    
    
  2. 配置 YML

    在 YML 中开启日志的 Feign 客户端

    logging:
      level:
        com.demo.springcloud.service.PaymentFeignService: debug
    
    
  3. 测试

标签:Feign,超时,OpenFeign,SpringCloud,接口,2.0,public,cloud,客户端
来源: https://blog.csdn.net/Mango_Bin/article/details/123073610