微服务熔断/降级/限流2.4+

最后更新于:2022-04-02 07:10:45

#### 微服务熔断/降级/限流——全局配置 jeecg-cloud-gateway 模块中application.yml加入如下配置 ~~~ # 全局熔断降级配置 default-filters: - name: Hystrix args: name: default #转发地址 fallbackUri: 'forward:/fallback' - name: Retry args: #重试次数,默认值是 3 次(负载均衡客户端发现远程请求实例不可到达后,去重试其他实例) retries: 3 #HTTP 的状态返回码 statuses: BAD_GATEWAY,BAD_REQUEST #指定哪些方法的请求需要进行重试逻辑,默认值是 GET 方法 methods: GET,POST # hystrix 信号量隔离,60秒后自动超时(生成环境根据各自项目情况调整,如需测试请将时间调小点) hystrix: enabled: true command: default: execution: isolation: strategy: SEMAPHORE thread: #超时时间 timeoutInMilliseconds: 60000 ~~~ 熔断处理器编写 ~~~ /** * 响应超时熔断处理器 * * @author zyf */ @RestController public class FallbackController { /** * 全局熔断处理 * @return */ @RequestMapping("/fallback") public Mono fallback() { return Mono.just("访问超时,请稍后再试!"); } } ~~~ #### 熔断路由配置 nacos中json配置,xml配置参考全局配置写法 ``` [ { "id": "jeecg-cloud-demo", "order": 1, "predicates": [ { "name": "Path", "args": { "_genkey_0": "/api/**", "_genkey_1": "/test/**" } } ], "filters": [ { "name": "Hystrix", "args": { "name": "default", "fallbackUri": "forward:/demo/fallback" } } ], "uri": "lb://jeecg-cloud-demo" } ] ``` filters部分为熔断配置 ### Spring cloud gateway熔断不重试问题 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/fa/fb/fafbfc6a41434b312e7562308e731d1e_1044x678.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/e6/88/e6882ec843d1d669685c521652f2bab4_1036x648.png) ### Spring cloud filters 说明 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0a/0b/0a0b7803647526fde7a635b68920bcee_1240x490.png) 部分过滤器说明 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/64/6e/646eee1970b0984f4cc04ece96b53255_892x814.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/9c/45/9c4555ba59c5d6e520b7755a2803fa54_893x656.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/d4/b2/d4b2d32c322fb6e7462f6a731394bbb0_900x637.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/77/a7/77a7618c30ecfbeb1f9bb3133886bbb6_893x437.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/eb/8d/eb8dcb9f6288ce283ddfe218b82e12e6_898x425.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/49/30/4930fc0ab4374d6ce46899ea07ef9461_909x337.png) [过滤器详解](https://blog.csdn.net/forezp/article/details/85057268) [ 视频教程](https://www.bilibili.com/video/BV1sZ4y1G7LL?p=8) ***** #### 限流配置 json路由配置 ``` { "name": "RequestRateLimiter", "args": { "key-resolver":"#{@ipKeyResolver}", "redis-rate-limiter.replenishRate": 20, "redis-rate-limiter.burstCapacity": 20 } } ``` xml路由配置 ``` spring: redis: host: localhost filters: # redis限流 , filter名称必须是RequestRateLimiter - name: RequestRateLimiter args: # 使用SpEL名称引用Bean,与上面新建的RateLimiterConfig类中的bean的name相同 key-resolver: '#{@ipKeyResolver}' # 每秒最大访问次数 redis-rate-limiter.replenishRate: 20 # 令牌桶最大容量 redis-rate-limiter.burstCapacity: 20 ``` 限流方式支持IP/用户接口等方式 ip限流:key-resolver: '#{@ipKeyResolver}' 用户限流:key-resolver: '#{@userKeyResolver}' 接口限流:key-resolver: '#{@apiKeyResolver}' #### 限流测试 模拟100个并发 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/52/7f/527f143c239827162b22a91f907ca157_1138x644.png) 测试结果 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/33/a1/33a1edccd53c91b4eb3deb48e8a53a73_1472x853.png)
';