SpringCloud入门(三): Feign简介与使用


Feign简介

  Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,帮助我们更加便捷、优雅地调用HTTP API。Feign其灵感来自Retrofit、JAXRS-2.0以及WebSocket。通过处理注解,将请求模板化,底层实际还是Ribbon,只是通过动态代理做了一次封装。

Ribbon与Feign的区别

Ribbon和Feign都是用于调用其他服务的,不过方式不同。

1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。

2.服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。

3.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

Feign入门

<!--1. 配置pom文件,引入在引入spring-cloud-starter-openfeign包 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<!- 2. 编写调用接口
    备注:name指定微服务的名称,  path是指定服务消费者的调用前缀
->
@FeignClient(name = "ms-provider-order", path = "/order")
public interface MsCustomFeignOrderApi {
    @RequestMapping("/queryOrdersByUserId/{userId}")
    List<OrderVo> queryOrdersByUserId(@PathVariable("userId") String userId);

    @RequestMapping("/getRegisterInfo")
    String getRegisterInfo();
}

<!- 3. 在主启动类上加入注解@EnableFeignClients注解 -->
@SpringBootApplication
@EnableFeignClients
public class FeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(FeignApplication.class, args);
    }
}

 

备注:如果没有加入@EnableFeignClients,在调用过程中会报Class has no fields的错误;

Feign 的日志级别

Feign有四种日志级别,适应不通的环境:

1、NONE:不记录任何日志(默认值),性能最佳,适用于生产。

2、HEADERS:记录BASIC级别的基础上,记录请求和响应的header。

3、FULL:记录请求和响应的header、body和元数据。适用于开发及测试环境定位问题。

4、BASIC:仅记录请求方法、URL、响应状态代码以及执行时间。适用于生产环境追踪问题。

属于文件配置:
feign.client.config.服务名(FeignClient的Name属性).loggerLevel=full

通过代码配置:
public class FeignConfig {
    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.BASIC;
    }
}

 备注:FeignConfig类,建议不要添加@Configuration注解,否则该配置将会被所有Feign Client共享,无法实现细粒度配置。如果一定要加@Configuration注解,就不要让主应用程序上下文@ComponentScan扫描到。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM