• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

SpringCloud-4Feign调用

武飞扬头像
growing_duck
帮助1

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

feign的基本使用:

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

  1.  
    <dependency>
  2.  
    <groupId>org.springframework.cloud</groupId>
  3.  
    <artifactId>spring-cloud-starter-openfeign</artifactId>
  4.  
    </dependency>

2、启动类使⽤注解@EnableFeignClients

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

3、创建feign接口

  1.  
    // @FeignClient表明当前类是一个Feign客户端,value指定该客户端要请求的服务名称(登记到注册中心上的服务提供者的服务名称)
  2.  
    @FeignClient(value = "lagou-service-resume")
  3.  
    @RequestMapping("/resume")
  4.  
    public interface ResumeServiceFeignClient {
  5.  
     
  6.  
     
  7.  
    // Feign要做的事情就是,拼装url发起请求
  8.  
    // 我们调用该方法就是调用本地接口方法,那么实际上做的是远程请求
  9.  
    @GetMapping("/openstate/{userId}")
  10.  
    public Integer findDefaultResumeState(@PathVariable("userId") Long userId);
  11.  
     
  12.  
    }

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

feign对负载均衡的支持: 

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

feign对熔断的支持: 

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

  1.  
    # 开启Feign的熔断功能
  2.  
    feign:
  3.  
    hystrix:
  4.  
    enabled: true

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

1、定义fallback处理类:

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

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

2、在feign接口中指定

  1.  
    @FeignClient(value = "lagou-service-resume",fallback = ResumeFallback.class,path = "/resume")
  2.  
    //@RequestMapping("/resume")
  3.  
    public interface ResumeServiceFeignClient {
  4.  
     
  5.  
     
  6.  
    // Feign要做的事情就是,拼装url发起请求
  7.  
    // 我们调用该方法就是调用本地接口方法,那么实际上做的是远程请求
  8.  
    @GetMapping("/openstate/{userId}")
  9.  
    public Integer findDefaultResumeState(@PathVariable("userId") Long userId);
  10.  
     
  11.  
    }

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

feign对压缩的支持: 

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

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

feign的日志级别:  

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

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

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

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaacjk
系列文章
更多 icon
同类精品
更多 icon
继续加载