记 spring cloud gateway Hystrix 调优?

记 spring cloud gateway Hystrix 调优?

spring cloud gateway : 2.1.2

使用

根据官方配置,通过下面的方式就能添加 Hystrix
添加到 default-filters 所有的路由都可以使用到

spring.cloud.gateway.default-filters:
    - name: Hystrix
      args:
        name: globalcmd
        fallbackUri: forward:/errorFallback

分析


这里有一个隐患,也就是所有,所有的 路由 都会共享一个 Hystrix 池(globalcmd)。
A服务出错短路,导致B服务也访问不了,这肯定不科学

希望服务之间能隔离,不要相互影响,也就是应该有独立线程池( A_cmd,B_cmd,... 等)

通过查看源码,也无法通过继承重写比较优雅的方式实现隔离(也就是每个服务独立声明cmd) 

如果愿意手动配置服务的路由另说,但是这种方式放弃了注册中心帮我们自动创建的路由,感觉不是很优雅,遂放弃。

解决


通过服务发现配置实现隔离
经过资料查找,发现服务的配置支持sple,可以达到我们的需求
配置如下:

spring.cloud.gateway.discovery.locator.filters:
	- name: Hystrix
	  args:
		name: serviceId+'_globalcmd'
		fallbackUri: "'forward:/errorFallback'"

请注意与 default-filters 的区别,default-filters 是所有的路由
这里只是服务发现(注册中心)的路由

        
结束语


这种方式 Hystrix 的配置都是统一配置了,如下:

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000
          semaphore:
            maxConcurrentRequests: 500

比如 A服务6秒超时,B服务3秒超时 等 更定制化的需求就没法满足(愿意手动配就当我没说)
目前我的做法是,通过调整部署架构达到,比如 A网关 6秒,B网关3秒 或者自定义 等
如果大家有更好的方法,请不吝指教,谢谢

你可能感兴趣的:(spring,gateway,spring,cloud,Hystrix)