别闹腰不行 2023-03-18 13:49 采纳率: 100%
浏览 16
已结题

getaway做限流跟熔断转发两个怎么弄都不生效

脑仁疼
自己写个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<String> 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依赖
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

    </dependencies>

```

  • 写回答

2条回答 默认 最新

  • 追cium 2023-03-18 13:54
    关注

    参考GPT和自己的思路:

    根据你提供的信息,我可以初步判断你的限流跟熔断转发两个没有生效的问题可能有以下原因:

    1. Redis未正确配置:在你的yml文件中,虽然提供了Redis的配置信息,但有可能需要在代码中手动指定Redis连接工厂以确保连接成功。具体可参考RedisConnectionFactory的相关文档。

    2. 限流跟熔断转发的配置不正确:你的yml文件中的路由信息与过滤器配置看起来正确,但需要检查是否连接了正确的限流跟熔断的组件,如Redis Rate Limiter和Hystrix。

    3. 请求路径不正确:限流跟熔断转发的生效需要符合指定的请求路径规则。你的代码中只设置了"/user/**"和"/order/**"路径开头的请求,如果你的测试请求路径不符合,那么限流跟熔断转发就不会生效。

    4. 限流跟熔断转发的逻辑有误:假设前三个问题都没有出现,可能要检查是否存在逻辑上的问题,例如逻辑误判等。你可以在代码中增加日志输出来调试。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加