bladex 配置gateway 限流不生效

Blade 未结 2 1629
mawl
mawl 2021-04-06 15:54
  1. nacos 配置了gateway.json 

[

{

"id": "blade-system",

"order": 0,

"predicates": [

{

"name": "Path",

"args": {

"pattern": "/blade-system/**"

}

}

],

"filters": [

{

"name":"RequestRateLimiter",

"args": {

"key-resolver": "#{@pathKeyResolver}",

"redis-rate-limiter.replenishRate":"0",

" redis-rate-limiter.burstCapacity":"0"

}

}

],

"uri": "http://blade-system"

}

]

2.限流bean

image.png


3.启动调用接口限流不生效

2条回答
  •  3395733618
    3395733618 (楼主)
    2021-04-07 09:45

    你gateway的配置不生效的原因很简单。

    image.png

    这个spring.cloud.gateway.discovery.locator.enabled = true

    因为blade默认是配置了网关使用注册中心自动生成routers,生成的routers会将带服务名的uri转发到对应的微服务。

    此是你自己再配置一个routers转发到对应的微服务开启限流就会没有效果了。

    解决的办法也很简单:

    1. 将spring.cloud.gateway.discovery.locator.enabled设置为false,然后所有微服务的routers全部自己手写一遍配置。这样你对单个微服务中的routers配置限流就可以成功了。但是这个很麻烦,尤其是微服务很多的时候。

    2. 如果你所有的url限流的值都一样,你可以配置spring.cloud.gateway.globle-filter,这样你所有的url就都可以限流了。当然,这种情况几乎是不可能出现的,大多数情况我们都只会对少数几个url限流。

    3. 不使用gateway限流,使用作者推荐的sentinel限流,sentinel限流挺好用的,有图形化界面。只要点点点,输入几个数字就可以了。但是sentinel也有缺点,就是限流规则持久化要自己改代码,sentinel开源版的集群方案一直没有,sentinel的日志量特别大,特别反人类。

    具体怎么操作请结合实际需求自己确定吧。

提交回复