分享

Feign —— SpringCloud(六)

 印度阿三17 2020-04-14

什么是Feign?

  Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样,不需要自己拼接Url,拼接参数等操作,都交给Feign去做。

  Feign是Netflix开发的声明式、模板化的Http客户端,其灵感来自Retrofit、JAXRS-2.0以及WebSocket。

  Feign可以帮助我们更加便捷、优雅地调用HttpApi。

  SpringCloud对Feign进行了增强,使Feign支持了SpringMVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。

 

初步使用Feign

导入依赖

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

 

开启Feign功能

  添加注解,开启Feign功能。

@SpringCloudApplication
@EnableFeignClients // 开启feign客户端
public class ItcastServiceConsumerApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(ItcastServiceConsumerApplication.class, args);
    }
}

  删除RestTemplate:Feign已经自动继承了Ribbon负载均衡的RestTemplate。所以,此处不需要再注册RestTemplate。

 

Feign的客户端

@FeignClient(value = "service-provider") // 标注该类是一个feign接口
public interface UserClient {

    @GetMapping("user/{id}")
    User queryById(@PathVariable("id") Long id);
}

  这是一个接口,Feign会通过动态代理,帮我们生成实现类。这点跟Mybatis的mapper很像。

  @FeignClient,声明这是一个Feign客户端,类似@Mapper注解。同时通过value属性指定服务名称。

  接口中的定义方法,完全采用SpringMVC的注解,Feign会根据注解帮我们生成URL,并访问获取结果。

@Controller
@RequestMapping("consumer/user")
public class UserController {

    @Autowired
    private UserClient userClient;

    @GetMapping
    @ResponseBody
    public User queryUserById(@RequestParam("id") Long id){
        User user = this.userClient.queryUserById(id);
        return user;
    }

}

 

负载均衡

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

  因此不需要额外引入依赖,也不需要再注册RestTemplate对象。

 

Hystrix支持

  Feign默认也有对Hystrix的继承。

  默认情况是关闭的,需要通过下面的参数来开启:

feign:
  hystrix:
    enabled: true # 开启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 设置日志级别。

  这个对Feign客户端不会产生效果,因为@FeignClient注解修改的客户端在被代理时,都会创建一个新的Feign.Logger实例。

  需要额外指定这个日志的级别。

logging:
  level:
    cn.itcast: debug
@Configuration
public class FeignLogConfiguration {

    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

  NONE:不记录任何日志信息,默认值。

  BASIC:仅记录请求的方法,URL以及响应状态码和执行时间。

  HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息。

  FULL:记录所有请求和响应的明细,包括头信息、请求体,元数据。

 

FeignClient中指定配置类

@FeignClient(value = "service-privider", fallback = UserFeignClientFallback.class, configuration = FeignConfig.class)
public interface UserFeignClient {
    @GetMapping("/user/{id}")
    User queryUserById(@PathVariable("id") Long id);
}

 

来源:https://www./content-4-676051.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多