记 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秒 或者自定义 等
如果大家有更好的方法,请不吝指教,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Gateway可以通过集成熔断器来实现熔断功能。在Spring Cloud Gateway中,可以使用Hystrix或者Resilience4j作为熔断器。 使用Hystrix实现熔断的步骤如下: 1. 引入`spring-cloud-starter-netflix-hystrix`依赖。 2. 在启动类上添加`@EnableCircuitBreaker`注解开启熔断功能。 3. 在路由配置中,通过添加`hystrix`参数来开启熔断器。例如: ``` spring: cloud: gateway: routes: - id: my_route uri: http://example.org predicates: - Path=/foo/** filters: - RewritePath=/foo/(?<segment>.*), /$\{segment} - Hystrix=myHystrixCommand ``` 4. 在配置文件中配置Hystrix的相关属性,例如: ``` hystrix: command: myHystrixCommand: execution: isolation: thread: timeoutInMilliseconds: 5000 ``` 5. 自定义熔断处理逻辑,实现`fallback`方法,处理服务降级逻辑。 使用Resilience4j实现熔断的步骤如下: 1. 引入`resilience4j-spring-boot2`依赖。 2. 在配置文件中配置Resilience4j的相关属性,例如: ``` resilience4j: circuitbreaker: configs: myCircuitBreakerConfig: failureRateThreshold: 50 waitDurationInOpenState: 5000 ringBufferSizeInClosedState: 5 instances: myCircuitBreaker: baseConfig: myCircuitBreakerConfig ``` 3. 在路由配置中,通过添加`resilience4j`参数来开启熔断器。例如: ``` spring: cloud: gateway: routes: - id: my_route uri: http://example.org predicates: - Path=/foo/** filters: - RewritePath=/foo/(?<segment>.*), /$\{segment} - Resilience4j=myCircuitBreaker ``` 4. 自定义熔断处理逻辑,实现`fallback`方法,处理服务降级逻辑。 以上是Spring Cloud Gateway实现熔断的基本步骤,具体的配置和处理逻辑可以根据实际需求进行整和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值