SpringCloud快速开始 | Feign和熔断器hystrix使用注意事项(六)Greenwich版本

原文链接

一、Feign是什么?

        Feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。

        Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。 Feign整合了Ribbon和Hystrix,可以让我们不再需要显式地使用这两个组件。

总起来说,Feign具有如下特性:

可插拔的注解支持,包括Feign注解和JAX-RS注解;

支持可插拔的HTTP编码器和解码器;

支持Hystrix和它的Fallback(熔断回调方法); 支持Ribbon的负载均衡;

支持HTTP请求和响应的压缩。

 

二、使用事项

       2.1、Feign自带的Hystrix熔断器是默认关闭,当打开时需要将feign.hystrix.enabled参数设置为true,否则参数设置会关闭Feign客户端的hystrix,其主要的配置是对HystrixCommand的配置

      2.2、当Feign开启熔断之后,所有对外部的调用请求会经过HystrixCommand中的线程池执行,但是该线程池最大线程为10,等待线程为10,所以当并发量高于20时其他请求会直接进入熔断FallBack,配置如下

# 并发执行的最大线程数,默认10
hystrix.threadpool.default.coreSize=50
hystrix.threadpool.default.maximumSize=100
hystrix.threadpool.default.allowMaximumSizeToDivergeFromCoreSize=true
# BlockingQueue的最大队列数,默认值-1
hystrix.threadpool.default.maxQueueSize=50
# 即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝,默认值5
hystrix.threadpool.default.queueSizeRejectionThreshold=50

     2.3、Feign默认的http调用方式是JDK原生的HttpURLConnection,此方式每次调用时会新建一个HttpURLConnection效率不高,我们可以开启Okhttp调用方式,加入如下配置

# feign client 配置
feign.httpclient.enabled=false
feign.okhttp.enabled=true

依赖增加pom


    io.github.openfeign
    feign-okhttp

  2.4 Feign超时时间

      使用Feign调用接口分两层,ribbon的调用和hystrix的调用,所以ribbon的超时时间和Hystrix的超时时间的结合就是Feign的超时时间

       2.4.1、Feign 的负载均衡底层用的就是 Ribbon,所以全局超时时间是配置的ribbon,如下

       #全局配置
       # 请求连接的超时时间 默认的时间为 1 秒
       ribbon.ConnectTimeout=5000
       # 请求处理的超时时间
       ribbon.ReadTimeout=5000

       2.4.2、一般情况下 都是 ribbon 的超时时间(<)hystrix的超时时间(因为涉及到ribbon的重试机制) ,hystrix超时配置如下

       # hystrix熔断超时配置
       hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000

三、Feign调用重试

      Feign的重试与ribbon存在冲突,springCloud在某个版本后默认关闭了feign自身的重试机制

       3.1、ribbon重试设置有三个参数

           ribbon.OkToRetryOnAllOperations=false
           ribbon.MaxAutoRetries=1
           ribbon.MaxAutoRetriesNextServer=1

           OkToRetryOnAllOperations为true时表示对所有请求进行重试,此设置默认关闭,ribbon的重试默认只对get查询请求进行重试,默认情况下,GET方式请求无论是连接异常还是读取异常,都会进行重试;

       ribbon的重试次数为MaxAutoRetries + MaxAutoRetriesNextServer + (MaxAutoRetries * MaxAutoRetriesNextServer )

       所以上面的配置表示ribbon会重试三次,包含初次请求的一次,共四次请求,如果重试过程中超出了hystrix的超时配置会直接进入到熔断中

      关闭请求重试将MaxAutoRetriesNextServer和MaxAutoRetries都等于0

 

你可能感兴趣的:(SpringCloud)