美文网首页藏兵谷JAVAcloud组件
SpringCloud微服务之服务调用Feign

SpringCloud微服务之服务调用Feign

作者: iDevOps | 来源:发表于2019-11-12 16:48 被阅读0次

    前面我们学习了使用Ribbon,大大简化了远程调用时的代码

    # ribbon远程调用服务
    restTemplate.getForObject("http://eureka-client-user/hello", String.class);
    

    我们思考下,还有没有更优雅的方式呢?
    这就是我们接下来要学习的Feign。

    Feign简介

    feign的中文翻译是假装、伪装的意思。
    它可以把Rest请求进行隐藏,伪装成类似SpringMVC的Controller一样,让你可以不用拼接url,这些Feign都帮你来完成。

    快速入门
    • 依赖
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <version>2.0.1.RELEASE</version>
    </dependency>
    
    • Feign客户端
    /**
     * @FeignClient: 声明这是一个Feign客户端
     * value : 指定服务名称
     * fallback : 熔断错误处理类
     * 接口中的定义方法,完全采用SpringMVC的注解,Feign会根据注解帮我们生成URL,并访问获取结果
     */
    @FeignClient(value = "eureka-client-user", fallback = UserFeignClientFallback.class)
    public interface UserFeignClient {
    
        @GetMapping("/hello")
        String hello();
    
    }
    
    • 开启Feign
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableFeignClients
    public class FeignApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(FeignApplication.class, args);
        }
    
    }
    
    • 开启Hystix熔断
      默认Feign集成了Hystix
    feign:
      hystrix:
        enabled: true # 开启Feign的熔断功能
    
    # fallback处理类
    @Component
    public class UserFeignClientFallback implements UserFeignClient {
        @Override
        public String hello() {
            return "error";
        }
    }
    
    • Ribbon负载均衡
      Feign中本身已经集成了Ribbon依赖和自动配置,我们不需要引用额外的配置,也不需要注册RestTemplate对象。
      我们也可以自定义区配置Ribbon
    eureka-client-user:
      ribbon:
        ConnectTimeout: 250 # 连接超时时间(ms)
        ReadTimeout: 1000 # 通信超时时间(ms)
        OkToRetryOnAllOperations: true # 是否对所有操作重试
        MaxAutoRetriesNextServer: 1 # 同一服务不同实例的重试次数
        MaxAutoRetries: 1 # 同一实例的重试次数
    

    到这里就配置好了,可以测试了。

    Feign的其他功能(了解)
    • 请求压缩
      Spring Cloud Feign 支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。通过下面的参数即可开启请求与响应的压缩功能
    feign:
      compression:
        request:
          enabled: true # 开启请求压缩
        response:
          enabled: true # 开启响应压缩
    

    同时,我们也可以对请求的数据类型,以及触发压缩的大小下限进行设置

    feign:
      compression:
        request:
          enabled: true # 开启请求压缩
          mime-types: text/html,application/xml,application/json # 设置压缩的数据类型
          min-request-size: 2048 # 设置触发压缩的大小下限
    
    • 日志级别
      通过logging.level.xx=debug来设置日志级别。然而这个对Fegin客户端而言不会产生效果。因为@FeignClient注解修改的客户端在被代理时,都会创建一个新的Fegin.Logger实例。我们需要额外指定这个日志的级别才可以

    相关文章

      网友评论

        本文标题:SpringCloud微服务之服务调用Feign

        本文链接:https://www.haomeiwen.com/subject/uclqictx.html