打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Feign —— SpringCloud(六)

什么是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
@Configurationpublic 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.icode9.com/content-4-676051.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SpringCloud Feign远程调用公共类抽取【SpringCloud系列4】
springcloud组件技术分享(推荐)
Spring Cloud OpenFeign 动态Url
Feign简介
springcloud的两种负载均衡策略
微服务框架
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服