脑仁疼
自己写个demo,getaway做限流跟熔断转发两个怎么弄都不生效,也不报错。redis里也没有key.哪位给瞅瞅。
```bash
//yml
routes:
- id: user-service
uri: lb://userservice
predicates: #路由断言是否符合规则
- Path=/user/** #路径断言,判断路径是否是/user开头 如果是 则符合
filters:
# - StripPrefix=1 #用户请求路径是/api/goods,而真实路径是/goods,这时候我们需要去掉/api才是真实路径
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 1 #每秒生产令牌数
redis-rate-limiter.burstCapacity: 2 #最大qps数量
key-resolver: '#{@currentLimitingConfig}'
- name: Hystrix
args:
name: fallback
failbackUri: forward:/one
- id: order-service
uri: lb://orderservice
predicates: #路由断言是否符合规则
- Path=/order/** #路径断言,判断路径是否是/order开头 如果是 则符合
redis:
# 地址
host: xx.xx.xx.69
# 端口,默认为6379
port: 6379
# 数据库索引
database: 0
# 密码
password: asdfg
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
//令牌桶方法限流
@Component
public class CurrentLimitingConfig implements KeyResolver {
@Override
public Mono resolve(ServerWebExchange exchange) {
System.out.println("地址="+exchange.getRequest().getRemoteAddress().getAddress().getHostName());
return Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostName());
}
}
//熔断转发的请求方法
@RestController
public class MyGateWayController {
@RequestMapping("/one")
public String one(){
return "one";
}
}
//pom依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-gateway
org.springframework.boot
spring-boot-starter-data-redis-reactive
org.apache.commons
commons-pool2
2.6.2
org.springframework.boot
spring-boot-starter-test
org.springframework.cloud
spring-cloud-starter-netflix-hystrix
```
参考GPT和自己的思路:
根据你提供的信息,我可以初步判断你的限流跟熔断转发两个没有生效的问题可能有以下原因:
Redis未正确配置:在你的yml文件中,虽然提供了Redis的配置信息,但有可能需要在代码中手动指定Redis连接工厂以确保连接成功。具体可参考RedisConnectionFactory的相关文档。
限流跟熔断转发的配置不正确:你的yml文件中的路由信息与过滤器配置看起来正确,但需要检查是否连接了正确的限流跟熔断的组件,如Redis Rate Limiter和Hystrix。
请求路径不正确:限流跟熔断转发的生效需要符合指定的请求路径规则。你的代码中只设置了"/user/**"和"/order/**"路径开头的请求,如果你的测试请求路径不符合,那么限流跟熔断转发就不会生效。
限流跟熔断转发的逻辑有误:假设前三个问题都没有出现,可能要检查是否存在逻辑上的问题,例如逻辑误判等。你可以在代码中增加日志输出来调试。
redis的问题