【SpringCloud-4】Feign调用

前面的学习中,要调用另一个服务,用的是RestTemplate,自己封装url,比较麻烦。使用feign就比较简单了,一个注解搞定。 它其实就是一个轻量级http的服务客户端,并且,并且,它还有负载均衡和断路器的能力:Feign = RestTemplate+Ribbon+Hystrix

feign的基本使用:

1、在消费者服务中导入依赖

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

2、启动类使⽤注解@EnableFeignClients

注意:此时去掉Hystrix熔断的⽀持注解@EnableCircuitBreaker即可包括引⼊的依赖,因为Feign会⾃动引⼊

3、创建feign接口

// @FeignClient表明当前类是一个Feign客户端,value指定该客户端要请求的服务名称(登记到注册中心上的服务提供者的服务名称)
@FeignClient(value = "lagou-service-resume")
@RequestMapping("/resume")
public interface ResumeServiceFeignClient {


    // Feign要做的事情就是,拼装url发起请求
    // 我们调用该方法就是调用本地接口方法,那么实际上做的是远程请求
    @GetMapping("/openstate/{userId}")
    public Integer findDefaultResumeState(@PathVariable("userId") Long userId);

}

如上,url的指定,都是用springmvc的方式,很方便。指明调用的服务和接口,然后使用的时候,使用@Autowire注入即可。 

feign对负载均衡的支持: 

Feign 本身已经集成了Ribbon依赖和⾃动配置,因此我们不需要额外引⼊依赖,可以通过 ribbon.xx 来进⾏配置(就是之前学习的ribbon的配置方式)。另外,feign调用时,可以指定接口超时时间(默认1s),但是如果使用ribbon配置后,则会以ribbon的为准。

扫描二维码关注公众号,回复: 15341920 查看本文章

feign对熔断的支持: 

对于熔断hystrix的支持,也不需要再单独引入依赖了,只需要配置文件开启支持即可:

# 开启Feign的熔断功能
feign:
  hystrix:
    enabled: true

其他的按照之前hystrix的方式使用即可。值得注意的是,feign本身有超时时间的设置,如果此时又设置了hystrix的熔断超时时间,则会以较小的那个时间为准,超过该时间就进入熔断机制。  那之前也说了,熔断后可以指定降级的方法,feign接口这里也可以指定:

1、定义fallback处理类:

/**
 * 降级回退逻辑需要定义一个类,实现FeignClient接口,实现接口中的方法
 *
 *
 */
@Component  // 别忘了这个注解,还应该被扫描到
public class ResumeFallback implements ResumeServiceFeignClient {
    @Override
    public Integer findDefaultResumeState(Long userId) {
        return -6;
    }
}

直接实现feign接口,重写所有原方法逻辑即可。

2、在feign接口中指定

@FeignClient(value = "lagou-service-resume",fallback = ResumeFallback.class,path = "/resume")
//@RequestMapping("/resume")
public interface ResumeServiceFeignClient {


    // Feign要做的事情就是,拼装url发起请求
    // 我们调用该方法就是调用本地接口方法,那么实际上做的是远程请求
    @GetMapping("/openstate/{userId}")
    public Integer findDefaultResumeState(@PathVariable("userId") Long userId);

}

如上,在FeignClient注解中指定fallback属性即可。 值得注意的是,使用fallback后,要把@RequestMapping("/resume")注释掉,把前缀/resume放到FeignClient的path属性中,否则可能会报错。

feign对压缩的支持: 

feign调用时,可能存在请求或者相应体过大的情况。 feign可以支持压缩,直接配值开启即可:

feign:
  compression:
    request:
      enabled: true # 开启请求压缩
      mime-types: text/html,application/xml,application/json # 设置压缩的数据类型,此处也是默认值
      min-request-size: 2048 # 设置触发压缩的⼤⼩下限,此处也是默认值
    response:
      enabled: true # 开启响应压缩

feign的日志级别:  

Feign是http请求客户端,类似于咱们的浏览器,它在请求和接收响应的时候,可以打印出⽐较详细的⼀些⽇志信息(响应头,状态码等等)。 如果我们想看到Feign请求时的⽇志,我们可以进⾏配置,默认情况下Feign的⽇志没有开启。

// Feign的⽇志级别(Feign请求过程信息)
// NONE:默认的,不显示任何⽇志----性能最好
// BASIC:仅记录请求⽅法、URL、响应状态码以及执⾏时间----⽣产问题追踪
// HEADERS:在BASIC级别的基础上,记录请求和响应的header
// FULL:记录请求和响应的header、body和元数据----适⽤于开发及测试环境定位问题
@Configuration
public class FeignConfig {
    @Bean
    Logger.Level feignLevel() {
        return Logger.Level.FULL;
     }
}

还可以对某个feign接口修改日志级别:

logging:
   level:
# Feign⽇志只会对⽇志级别为debug的做出响应
 com.lagou.edu.controller.service.ResumeServiceFeignClient:debug

猜你喜欢

转载自blog.csdn.net/growing_duck/article/details/131213579