在微服务架构中,服务与服务之间通过远程调用的方式进行通信,一旦某个被调用的服务发生了故障,其依赖服务也会发生故障,此时就会发生故障的蔓延,最终导致系统瘫痪。Hystrix实现了断路器模式,当某个服务发生故障时,通过断路器的监控,给调用方返回一个错误响应,而不是长时间的等待,这样就不会使得调用方由于长时间得不到响应而占用线程,从而防止故障的蔓延。Hystrix具备服务降级、服务熔断、线程隔离、请求缓存、请求合并及服务监控等强大功能。

image.png

image.png

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.cloud</groupId>
  7. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>org.springframework.cloud</groupId>
  11. <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  12. </dependency>

@HystrixCommand中的常用参数

  • fallbackMethod:指定服务降级处理方法;
  • ignoreExceptions:忽略某些异常,不发生服务降级;
  • commandKey:命令名称,用于区分不同的命令;
  • groupKey:分组名称,Hystrix会根据不同的分组来统计命令的告警及仪表盘信息;
  • threadPoolKey:线程池名称,用于划分线程池。

配置

  1. hystrix:
  2. command: #用于控制HystrixCommand的行为
  3. default:
  4. execution:
  5. isolation:
  6. strategy: THREAD #控制HystrixCommand的隔离策略,THREAD->线程池隔离策略(默认),SEMAPHORE->信号量隔离策略
  7. thread:
  8. timeoutInMilliseconds: 1000 #配置HystrixCommand执行的超时时间,执行超过该时间会进行服务降级处理
  9. interruptOnTimeout: true #配置HystrixCommand执行超时的时候是否要中断
  10. interruptOnCancel: true #配置HystrixCommand执行被取消的时候是否要中断
  11. timeout:
  12. enabled: true #配置HystrixCommand的执行是否启用超时时间
  13. semaphore:
  14. maxConcurrentRequests: 10 #当使用信号量隔离策略时,用来控制并发量的大小,超过该并发量的请求会被拒绝
  15. fallback:
  16. enabled: true #用于控制是否启用服务降级
  17. circuitBreaker: #用于控制HystrixCircuitBreaker的行为
  18. enabled: true #用于控制断路器是否跟踪健康状况以及熔断请求
  19. requestVolumeThreshold: 20 #超过该请求数的请求会被拒绝
  20. forceOpen: false #强制打开断路器,拒绝所有请求
  21. forceClosed: false #强制关闭断路器,接收所有请求
  22. requestCache:
  23. enabled: true #用于控制是否开启请求缓存
  24. collapser: #用于控制HystrixCollapser的执行行为
  25. default:
  26. maxRequestsInBatch: 100 #控制一次合并请求合并的最大请求数
  27. timerDelayinMilliseconds: 10 #控制多少毫秒内的请求会被合并成一个
  28. requestCache:
  29. enabled: true #控制合并请求是否开启缓存
  30. threadpool: #用于控制HystrixCommand执行所在线程池的行为
  31. default:
  32. coreSize: 10 #线程池的核心线程数
  33. maximumSize: 10 #线程池的最大线程数,超过该线程数的请求会被拒绝
  34. maxQueueSize: -1 #用于设置线程池的最大队列大小,-1采用SynchronousQueue,其他正数采用LinkedBlockingQueue
  35. queueSizeRejectionThreshold: 5 #用于设置线程池队列的拒绝阀值,由于LinkedBlockingQueue不能动态改版大小,使用时需要用该参数来控制线程数

实例配置只需要将全局配置中的default换成与之对应的key即可。

  1. hystrix:
  2. command:
  3. HystrixComandKey: #将default换成HystrixComrnandKey
  4. execution:
  5. isolation:
  6. strategy: THREAD
  7. collapser:
  8. HystrixCollapserKey: #将default换成HystrixCollapserKey
  9. maxRequestsInBatch: 100
  10. threadpool:
  11. HystrixThreadPoolKey: #将default换成HystrixThreadPoolKey
  12. coreSize: 10