SpringCloud-Hystrix配置说明

一、配置详解

1:设置隔离策略

    所有实例:hystrix.command.default.execution.isolation.strategy=

    单个实例:hystrix.command.HystrixCommandKey.execution.isolation.strategy=

    THREAD(默认):在固定大小线程池中,以单独线程执行,并发请求数受限于线程池大小

    SEMAPHORE:在调用线程中执行,通过信号量来限制并发量

    在默认情况下,推荐HystrixCommands 使用 thread 隔离策略,HystrixObservableCommand 使用 semaphore 隔离策略。只有在高并发(单个实例每秒达到几百个调用)的调用时,才需要修改HystrixCommands 的隔离策略为semaphore 。semaphore 隔离策略通常只用于非网络调用

2:设置调用者等待命令执行的超时限制,超过此时间,HystrixCommand被标记为TIMEOUT,并执行回退逻辑

    execution.isolation.thread.timeoutInMilliseconds=1000(默认1000毫秒)

3:设置执行是否有超时限制

    execution.isolation.thread.interruptOnTimeout=true(默认)

4:设置HystrixCommand.run()的执行是否在超时发生时被中断

    execution.isolation.thread.interruptOnTimeout=true(默认)

5:设置HystrixCommand.run()的执行在取消动作发生时候可以响应中断

    execution.isolation.thread.interruptOnCancel=false(默认)

6:设置隔离策略为SEMAPHORE时允许的最大请求数

    execution.isolation.semaphore.maxConcurrentRequests=10(默认)

    如果达到最大并发数时,后续请求会被拒绝。信号量应该是容器(比如Tomcat)线程池一小部分,不能等于或者略小于容器线程池大小,否则起不到保护作用。

7:设置调用线程产生的HystrixCommand.getFallback()方法的允许最大请求数目

    fallback.isolation.semaphore.maxConcurrentRequests=10(默认)

    如果达到最大并发数目,后续请求将会被拒绝,如果没有实现回退,则抛出异常。

8:该属性决定当故障或者拒绝发生时,一个调用将会去尝试HystrixCommand.getFallback()

    fallback.enabled=true(默认)

9:设置断路器是否起作用

    circuitBreaker.enabled=true(默认)

10:该属性设置滚动窗口中将使断路器跳闸的最小请求数量

    circuitBreaker.requestVolumeThreshold=20(默认)

    如果此属性值为20,则在窗口时间内(如10s内),如果只收到19个请求且都失败了,则断路器也不会开启。

11:设置失败百分比的阈值。如果失败比率超过这个值,则断路器跳闸并且进入fallback逻辑

    circuitBreaker.errorThresholdPercentage=50(默认)

12:如果设置true,则强制使断路器跳闸,则会拒绝所有的请求.此值会覆盖circuitBreaker.forceClosed的值

    circuitBreaker.forceOpen=false(默认)

13:如果设置true,则强制使断路器进行关闭状态,此时会允许执行所有请求,无论是否失败的次数达到circuitBreaker.errorThresholdPercentage值

    circuitBreaker.forceClosed=false(默认)

14:设置在回路被打开,拒绝请求到再次尝试请求并决定回路是否继续打开的时间

    circuitBreaker.sleepWindowInMilliseconds=5000(默认值5000毫秒)

15:设置统计滚动窗口的时间长度

    metrics.rollingStats.timeInMilliseconds=10000(默认)

16:设置统计滚动窗口的桶数量

    metrics.rollingStats.numBuckets=10(默认)

    注意:以下配置必须成立,否则会抛出异常。

    metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0 如:10000/10、10000/20是正确的配置,但是10000/7错误的

    在高并发的环境里,每个桶的时间长度建议大于100ms

17:设置执行延迟是否被跟踪,并且被计算在失败百分比中。如果设置为false,则所有的统计数据返回-1

    metrics.rollingPercentile.enabled=true(默认)

18:此属性设置统计滚动百分比窗口的持续时间

    metrics.rollingPercentile.timeInMilliseconds=60000(默认)

19:设置统计滚动百分比窗口的桶数量

    metrics.rollingPercentile.numBuckets=6(默认)

    注意:以下配置必须成立,否则会抛出异常。

    metrics.rollingPercentile.timeInMilliseconds % metrics.rollingPercentile.numBuckets == 0 如: 60000/6、60000/60是正确的配置,但是10000/7错误的,在高并发的环境里,每个桶的时间长度建议大于1000ms

20:采样时间间隔

    metrics.healthSnapshot.intervalInMilliseconds=500(默认)

21:是否开启请求缓存功能

    requestCache.enabled =true(默认)

22:表示是否开启日志,打印执行HystrixCommand的情况和事件

    requestLog.enabled=true(默认)

23:设置同时批量执行的请求的最大数量

    maxRequestsInBatch=Integer.MAX_VALUE(默认)

24:批量执行创建多久之后,再触发真正的请求

    timerDelayInMilliseconds=10(默认)

25:是否对HystrixCollapser.execute() 和 HystrixCollapser.queue()开启请求缓存

    requestCache.enabled=true(默认)

26:设置线程池的core的大小

    coreSize=10(默认)

27:设置最大的线程池的大小,只有设置allowMaximumSizeToDivergeFromCoreSize时,此值才起作用

    maximumSize=10(默认)

28:设置最大的BlockingQueue队列的值

    maxQueueSize=-1(默认)

    如果设置-1,则使用SynchronousQueue队列,如果设置正数,则使用LinkedBlockingQueue队列

29:因为maxQueueSize值不能被动态修改,所有通过设置此值可以实现动态修改等待队列长度。即等待的队列的数量大于queueSizeRejectionThreshold时(但是没有达到maxQueueSize值),则开始拒绝后续的请求进入队列。

    queueSizeRejectionThreshold=5(默认)如果设置-1,则属性不启作用

30:设置线程多久没有服务后,需要释放(maximumSize-coreSize )个线程

    keepAliveTimeMinutes=1(默认)

31:设置allowMaximumSizeToDivergeFromCoreSize值为true时,maximumSize才有作用 
    allowMaximumSizeToDivergeFromCoreSize=false(默认)

32:设置滚动窗口的时间

    metrics.rollingStats.timeInMilliseconds=10000(默认)

33:设置滚动静态窗口分成的桶的数量

    metrics.rollingStats.numBuckets=10(默认)

    配置的值必须满足如下条件:

    metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0
    建议每个桶的时间长度大于100ms

二、配置案例

1:THREAD模式

hystrix:
  threadpool:
    default:
      coreSize: 200 ##并发执行的最大线程数,默认10
      maxQueueSize: 200 ##BlockingQueue的最大队列数
      queueSizeRejectionThreshold: 50 
      ##即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝
      execution:
        timeout:
          enabled: true
        isolation:
          strategy: THREAD
          semaphore:
            maxConcurrentRequests: 1000
          thread:
            timeoutInMilliseconds: 30000
  command:
    default:
      execution:
        timeout:
          enabled: true
        isolation:
          thread:
            timeoutInMilliseconds: 5000

2:SEMAPHORE模式

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds: 60000
          semaphore:
            maxConcurrentRequests: 1000
  shareSecurityContext: true

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#spring-cloud-books ## **使用** 1.根目录执行mvn clean install后,将所有war包放在document/run文件夹下 2.点击run-all.bat批量按顺序执行war包 启动时请等待,直到启动完一个,再按回车继续启动下一个 3.也可以按照自己需求启动每个项目的bat文件 以下按照启动顺序依次介绍各项目 ### **配置中心** 访问svn上配置文件所处位置,比如svn上某个地址 svn://xxx.xxx.xxx.xxx/project_name/docs 访问 http://localhost:8000/api/dev/docs 即显示docs目录下api-dev.properties文件中相关配置信息 ### **服务发现** 访问http://localhost:8001/discovery/ 界面如下: ![输入图片说明](http://git.oschina.net/uploads/images/2016/1121/181013_db44c0d2_43183.jpeg "在这里输入图片标题") 之后相应的服务启动后,刷新页面后可见已被发现的服务 ![输入图片说明](http://git.oschina.net/uploads/images/2016/1123/094700_ac4d9ecb_43183.jpeg "在这里输入图片标题") ### **服务端** 访问http://localhost:8002/swagger-ui.html 可以查看swagger文档,如下图: ![输入图片说明](http://git.oschina.net/uploads/images/2016/1121/181042_2d280d46_43183.jpeg "在这里输入图片标题") 相应技术为springboot+mysql+mybatis+hikariCP ### **API网关** 访问http://localhost:8005/swagger-ui.html ,如下图: ![输入图片说明](http://git.oschina.net/uploads/images/2016/1123/101922_61f72a16_43183.jpeg "在这里输入图片标题") 可查看相关接口,目前这里只是利用json web token做了一个鉴定请求是否有权调用服务端的安全验证功能,还有就是路由功能 ### **客户端** 访问http://localhost:8004/consumer/10 返回的json数据结果如下图: ![输入图片说明](http://git.oschina.net/uploads/images/2016/1123/102304_d351bed6_43183.jpeg "在这里输入图片标题") 这里是通过访问api网关,获取token放入请求的header中,然后请求服务端接口获取数据。 目前只做了查询bookID的功能,可自行扩展其它crud操作,如 http://localhost:8002/swagger-ui.html 中的各接口 这里还包括了负载均衡和熔断器功能,如果服务端访问不了,会访问相关故障信息,如下: ​ ``` { "code": -99, "message": "无法访问服务,该服务可能由于某种未知原因被关闭。请重启服务!", "data": null } ``` swagger文档,如下图: ![输入图片说明](http://git.oschina.net/uploads/images/2016/1123/101906_41ee44ef_43183.jpeg "在这里输入图片标题") ### **服务监控控制台** 访问http://localhost:8005/hystrix.steam 可以查看某服务在一个server节点或多个server节点上的实时运行情况 比如在搜索框输入 http://localhost:8004/hystrix.stream ,并在title输入框取名hystrix-8004 (注意在点击monitor stream按钮前,先运行 http://localhost:8004/consumer/10 ),结果如下图 ![输入图片说明](http://git.oschina.net/uploads/images/2016/1123/094900_506a714c_43183.jpeg "在这里输入图片标题") ### **聚合服务节点** 可在 http://localhost:8005/hystrix.steam 搜索框输入 http://localhost:8006/turbine.stream , 并在title输入框取名turbine-8006,看下列结果 ![输入图片说明](http://git.oschina.net/uploads/images/2016/1123/094949_b4459472_43183.jpeg "在这里输入图片标题") 这里因为服务只在我本机上部署,因此上述两张图是一样的,如果服务还部署在另外一台或多台server上,第二张图会显示多个server运行服务情况。如果此时有很多访问 http://localhost:8004/consumer/10 的请求,我们可以看见实时运行情况,如下图 ![输入图片说明](http://git.oschina.net/uploads/images/2016/1123/095115_0092d6cc_43183.jpeg "在这里输入图片标题") ### **Actuator** 每个项目的info信息都是直接从maven的pom文件中读取,具体可参考各个项目的resources目录下的application和application-test属性文件 ``` #查看info信息配置 [email protected]@ info.app.description[email protected]ion@ info.app.version[email protected]ion@ ``` 下列这些图是展示服务端,API网关,消费端的info信息 ![输入图片说明](http://git.oschina.net/uploads/images/2016/1123/102852_06e87b19_43183.jpeg "服务端") ![输入图片说明](http://git.oschina.net/uploads/images/2016/1123/102908_3eb87ba2_43183.jpeg "API网关") ![输入图片说明](http://git.oschina.net/uploads/images/2016/1123/103141_a10b809a_43183.jpeg "消费端")

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值