Feign 伪装-简化 远程代码调用

什么是Feign?

  • Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。不用再拼接url,拼接参数等等操作,一切都交给Feign去做。

为什么要用Feign

  • 简化 远程代码调用
  • 不用Feign,需要编写类似的大量重复代码,格式基本相同,无非参数不一样
  • 远程调用方式更优雅

怎么使用Feifn?

  1. 导入依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 启动类加入注解
@EnableFeignClients // 开启Feign功能
  1. 定义客户端接口
@FeignClient("服务名")
public interface UserFeignClient {
    @GetMapping("/user/{id}")
    User queryUserById(@PathVariable("id") integer id);
}
  1. 注入改接口,直接远程调用里面的访问方法.

附录:

  • RestTemplate注册可以被删除。Feign中已经自动集成了Ribbon负载均衡,因此不需要自己定义RestTemplate.

  • Feign中本身已经集成了Ribbon依赖和自动配置

    • Ribbon全局配置:对所有服务都生效
    # 加上服务名可以局部配置
    ribbon:  
      ConnectTimeout: 250 # 连接超时时间(ms)
      ReadTimeout: 1000 # 通信超时时间(ms)
      OkToRetryOnAllOperations: true # 是否对所有操作重试
      MaxAutoRetriesNextServer: 1 # 同一服务不同实例的重试次数
      MaxAutoRetries: 1 # 同一实例的重试次数
    
  • Hystix支持

    • 默认情况关闭,手动开启
    feign:
      hystrix:
        enabled: true # 开启Feign的熔断功能
    
    • Fallback配置
    1. 定义一个类,实现FeignClient接口,作为fallback的处理类
    @Component
    public class UserFeignClientFallback implements UserFeignClient {
    @Override
    public User queryUserById(Long id) {
        User user = new User();
        user.setName("用户查询出现异常!");
        return user;
     }
    }
    
    1. 然后在FeignClient接口中,指定编写的实现类
    @FeignClient(value = "user-service", fallback = UserFeignClientFallback.class)
    public interface UserFeignClient {
    
  • 请求压缩

    • GZIP压缩:

    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 # 设置触发压缩的大小下限

注:上面的数据类型、压缩大小下限均为默认值。

发布了5 篇原创文章 · 获赞 0 · 访问量 36

猜你喜欢

转载自blog.csdn.net/qq_44060273/article/details/104902052