✨ redis-cluster support refreshing this cluster topokogy view
This commit is contained in:
1 parent
16ed6055a4
commit
04371e8aa0
2 files changed
+69
-2
No files matched your search
+35
-2
@@ -17,17 +17,27 @@
|
||||
|
||||
package com.pig4cloud.pigx.common.data.cache;
|
||||
|
||||
import io.lettuce.core.ReadFrom;
|
||||
import io.lettuce.core.cluster.ClusterClientOptions;
|
||||
import io.lettuce.core.cluster.ClusterTopologyRefreshOptions;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
|
||||
import org.springframework.cache.annotation.EnableCaching;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.redis.connection.RedisClusterConfiguration;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
|
||||
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
|
||||
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
/**
|
||||
* RedisTemplate 配置
|
||||
*
|
||||
@@ -38,10 +48,9 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||
@AllArgsConstructor
|
||||
@AutoConfigureBefore(RedisAutoConfiguration.class)
|
||||
public class RedisTemplateConfig {
|
||||
private final RedisConnectionFactory redisConnectionFactory;
|
||||
|
||||
@Bean
|
||||
public RedisTemplate<String, Object> redisTemplate() {
|
||||
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
||||
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
|
||||
redisTemplate.setKeySerializer(new StringRedisSerializer());
|
||||
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
|
||||
@@ -50,4 +59,28 @@ public class RedisTemplateConfig {
|
||||
redisTemplate.setConnectionFactory(redisConnectionFactory);
|
||||
return redisTemplate;
|
||||
}
|
||||
|
||||
|
||||
@Bean
|
||||
@ConditionalOnProperty(value = "spring.redis.cluster.nodes")
|
||||
public LettuceConnectionFactory redisConnectionFactory(RedisProperties redisProperties) {
|
||||
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(redisProperties.getCluster().getNodes());
|
||||
|
||||
// https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster#user-content-refreshing-the-cluster-topology-view
|
||||
ClusterTopologyRefreshOptions clusterTopologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
|
||||
.enablePeriodicRefresh()
|
||||
.enableAllAdaptiveRefreshTriggers()
|
||||
.refreshPeriod(Duration.ofSeconds(5))
|
||||
.build();
|
||||
|
||||
ClusterClientOptions clusterClientOptions = ClusterClientOptions.builder()
|
||||
.topologyRefreshOptions(clusterTopologyRefreshOptions).build();
|
||||
|
||||
// https://github.com/lettuce-io/lettuce-core/wiki/ReadFrom-Settings
|
||||
LettuceClientConfiguration lettuceClientConfiguration = LettuceClientConfiguration.builder()
|
||||
.readFrom(ReadFrom.SLAVE_PREFERRED)
|
||||
.clientOptions(clusterClientOptions).build();
|
||||
|
||||
return new LettuceConnectionFactory(redisClusterConfiguration, lettuceClientConfiguration);
|
||||
}
|
||||
}
|
||||
+34
@@ -19,17 +19,27 @@ package com.pig4cloud.pigx.common.gateway.configuration;
|
||||
|
||||
import com.pig4cloud.pigx.common.core.constant.CacheConstants;
|
||||
import com.pig4cloud.pigx.common.gateway.support.RouteCacheHolder;
|
||||
import io.lettuce.core.ReadFrom;
|
||||
import io.lettuce.core.cluster.ClusterClientOptions;
|
||||
import io.lettuce.core.cluster.ClusterTopologyRefreshOptions;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
|
||||
import org.springframework.cloud.gateway.config.GatewayProperties;
|
||||
import org.springframework.cloud.gateway.config.PropertiesRouteDefinitionLocator;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.redis.connection.RedisClusterConfiguration;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
|
||||
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
|
||||
import org.springframework.data.redis.listener.ChannelTopic;
|
||||
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
/**
|
||||
* @author lengleng
|
||||
* @date 2018/11/5
|
||||
@@ -69,4 +79,28 @@ public class DynamicRouteAutoConfiguration {
|
||||
}, new ChannelTopic(CacheConstants.ROUTE_JVM_RELOAD_TOPIC));
|
||||
return container;
|
||||
}
|
||||
|
||||
|
||||
@Bean
|
||||
@ConditionalOnProperty(value = "spring.redis.cluster.nodes")
|
||||
public LettuceConnectionFactory redisConnectionFactory(RedisProperties redisProperties) {
|
||||
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(redisProperties.getCluster().getNodes());
|
||||
|
||||
// https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster#user-content-refreshing-the-cluster-topology-view
|
||||
ClusterTopologyRefreshOptions clusterTopologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
|
||||
.enablePeriodicRefresh()
|
||||
.enableAllAdaptiveRefreshTriggers()
|
||||
.refreshPeriod(Duration.ofSeconds(5))
|
||||
.build();
|
||||
|
||||
ClusterClientOptions clusterClientOptions = ClusterClientOptions.builder()
|
||||
.topologyRefreshOptions(clusterTopologyRefreshOptions).build();
|
||||
|
||||
// https://github.com/lettuce-io/lettuce-core/wiki/ReadFrom-Settings
|
||||
LettuceClientConfiguration lettuceClientConfiguration = LettuceClientConfiguration.builder()
|
||||
.readFrom(ReadFrom.SLAVE_PREFERRED)
|
||||
.clientOptions(clusterClientOptions).build();
|
||||
|
||||
return new LettuceConnectionFactory(redisClusterConfiguration, lettuceClientConfiguration);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user