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
3.启动调用接口限流不生效
现在bladex的限流都是通过sentinel来操作了,Gateway配置的问题很多而且不灵活所以不推荐了。
sentinel限流可以参考:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
你gateway的配置不生效的原因很简单。
这个spring.cloud.gateway.discovery.locator.enabled = true
因为blade默认是配置了网关使用注册中心自动生成routers,生成的routers会将带服务名的uri转发到对应的微服务。
此是你自己再配置一个routers转发到对应的微服务开启限流就会没有效果了。
解决的办法也很简单:
将spring.cloud.gateway.discovery.locator.enabled设置为false,然后所有微服务的routers全部自己手写一遍配置。这样你对单个微服务中的routers配置限流就可以成功了。但是这个很麻烦,尤其是微服务很多的时候。
如果你所有的url限流的值都一样,你可以配置spring.cloud.gateway.globle-filter,这样你所有的url就都可以限流了。当然,这种情况几乎是不可能出现的,大多数情况我们都只会对少数几个url限流。
不使用gateway限流,使用作者推荐的sentinel限流,sentinel限流挺好用的,有图形化界面。只要点点点,输入几个数字就可以了。但是sentinel也有缺点,就是限流规则持久化要自己改代码,sentinel开源版的集群方案一直没有,sentinel的日志量特别大,特别反人类。
具体怎么操作请结合实际需求自己确定吧。
扫一扫访问 Blade技术社区 移动端