美文网首页藏兵谷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