我正在尝试将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