可以使用Geode Redis适配器实施速率限制吗?

时间:2019-07-17 14:02:16

标签: redis geode spring-cloud-gateway

我正在尝试将Geode Redis适配器用作Spring Cloud Gateway提供的速率限制服务器。如果我使用真正的Redis服务器,则一切正常,但使用Geode Redis Adapter则不能。 我不太确定是否支持此功能。

我尝试启动[Geode图片](https://hub.docker.com/r/apachegeode/geode/),公开了默认的Redis端口 6739 。启动容器,我使用 gfsh 执行以下命令: start server --name=redis --redis-port=6379 --J=-Dgemfireredis.regiontype=PARTITION_PERSISTENT

当我尝试通过redis-cli -h localhost -p 6379访问本地计算机时,我可以建立连接。

我的实现很简单:

application.yaml

      - id: rate-limitter
        predicates:
          - Path=${GUI_CONTEXT_PATH:/rate-limit}
          - Host=${APP_HOST:localhost:8080}
        filters:
          - name: RequestRateLimiter
            args:
              key-resolver: "#{@remoteAddrKeyResolve}"
              redis-rate-limiter:
                replenishRate: ${rate.limit.replenishRate:1}
                burstCapacity: ${rate.limit.burstCapacity:2}
        uri: ${APP_HOST:localhost:8080}

Application.java

  @Bean
  KeyResolver remoteAddrKeyResolve() {
    return exchange -> Mono.just(exchange.getSession().subscribe().toString());
  }

启动我的应用程序并尝试访问 / rate-limit 时,我希望连接到Redis并显示我的页面。

但是,我的Spring应用程序一直尝试访问并且无法i.l.c.p.ReconnectionHandler: Reconnected to localhost:6379。因此,该页面不会显示并继续加载。 已在下面的Edit1中修复

问题是我正在使用RedisRateLimiter并尝试使用for循环来模拟访问。检查RedisRateLimiter.REMAINING_HEADER,该值始终为-1。似乎不正确,因为Redis本身没有这个问题。 在应用程序启动期间,我还收到与Geode Redis Adapter连接的以下消息: Starting without optional epoll library Starting without optional kqueue library

我的Geode Redis适配器或Spring中是否缺少任何其他东西? 谢谢

编辑1:我缺少启动定位器和区域的功能,这就是为什么我无法连接的原因。 start locator --name=locator start server --name=redis --redis-port=6379 --J=-Dgemfireredis.regiontype=PARTITION_PERSISTENT create region --name=redis-region --type=REPLICATE_PERSISTENT

0 个答案:

没有答案