承接上文《RedisTemplateConfig sentinel(哨兵模式) cluster(集群模式) 一键配置切换代码》 ,写一下之前遇到过的一个错误,也方便大家遇见同样错误时借鉴一下
首先来看一下配置redis sentinel redisConnectionFactory 的代码
@Bean("redisConnectionFactory") @ConditionalOnProperty(value = "spring.redis.mode",havingValue = "sentinel") public RedisConnectionFactory redisConnectionFactory(@Qualifier("poolConfig") GenericObjectPoolConfig config, RedisSentinelConfiguration redisConfig) {//注意传入的对象名和类型RedisSentinelConfiguration LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(config).build(); return new LettuceConnectionFactory(redisConfig, clientConfiguration); }
可以忽略
@ConditionalOnProperty(value = "spring.redis.mode",havingValue = "sentinel")
这个是用来根据nacos 配置判断自动注入cluster 模式还是sentinel 模式的,然后启动gateaway 报如下错误
然后跟一下代码
既然是
RouteDefinitionRouteLocator 类报错那就直接看报错方法 发现一共32个factory,确实没有RequestRateLimiter 的factory
直接说一下我的解决方式,其实也是随便改完之后就好用了,还没有进行跟踪
下面看看我是如何解决的
对,你看的没错,由原来的返回
redisConnectionFactory 接口变为返回实现类就ok了,然后再看下factorys
变为了33个factory 并且以及有了RequestRateLimiter
按理说返回接口与实现其实应该一样的,等以后有时间了再重新跟踪一下这个问题