diff --git a/README.md b/README.md index 12a4c76..66b24aa 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![GitHub issues](https://img.shields.io/github/release/RediSearch/spring-redisearch.svg)](https://github.com/RediSearch/spring-redisearch/releases/latest) -# Spring RediSearch +# Spring RediSearch with Sentinel [![Forum](https://img.shields.io/badge/Forum-RediSearch-blue)](https://forum.redislabs.com/c/modules/redisearch/) [![Discord](https://img.shields.io/discord/697882427875393627?style=flat-square)](https://discord.gg/xTbqgTB) diff --git a/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java b/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java index cba2674..eedb438 100644 --- a/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java +++ b/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java @@ -20,58 +20,78 @@ @EnableConfigurationProperties(RedisProperties.class) public class RediSearchAutoConfiguration { - @Bean - RedisURI redisURI(RedisProperties properties) { - RedisURI redisURI = RedisURI.create(properties.getHost(), properties.getPort()); - if (properties.getPassword() != null) { - redisURI.setPassword(properties.getPassword().toCharArray()); - } - Duration timeout = properties.getTimeout(); - if (timeout != null) { - redisURI.setTimeout(timeout); - } - return redisURI; - } - - @Bean(destroyMethod = "shutdown") - ClientResources clientResources() { - return DefaultClientResources.create(); - } - - @Bean(destroyMethod = "shutdown") - RediSearchClient client(RedisURI redisURI, ClientResources clientResources) { - return RediSearchClient.create(clientResources, redisURI); - } - - @Bean(name = "rediSearchConnection", destroyMethod = "close") - StatefulRediSearchConnection connection(RediSearchClient rediSearchClient) { - return rediSearchClient.connect(); - } - - @Bean(name = "rediSearchConnectionPoolConfig") - GenericObjectPoolConfig> poolConfig(RedisProperties redisProperties) { - return configure(redisProperties, new GenericObjectPoolConfig<>()); - } - - public GenericObjectPoolConfig> configure(RedisProperties redisProperties, - GenericObjectPoolConfig> config) { - config.setJmxEnabled(false); - Pool poolProps = redisProperties.getLettuce().getPool(); - if (poolProps != null) { - config.setMaxTotal(poolProps.getMaxActive()); - config.setMaxIdle(poolProps.getMaxIdle()); - config.setMinIdle(poolProps.getMinIdle()); - if (poolProps.getMaxWait() != null) { - config.setMaxWaitMillis(poolProps.getMaxWait().toMillis()); - } - } - return config; - } - - @Bean(name = "rediSearchConnectionPool", destroyMethod = "close") - GenericObjectPool> pool( - GenericObjectPoolConfig> config, RediSearchClient client) { - return ConnectionPoolSupport.createGenericObjectPool(client::connect, config); - } - -} + @Bean + RedisURI redisURI(RedisProperties properties) { + RedisProperties.Sentinel sentinel = properties.getSentinel(); + + RedisURI redisURI = null; + + if (sentinel != null) { + String firstNode = sentinel.getNodes().get(0).replaceAll(":.*", ""); + int port = Integer.parseInt(sentinel.getNodes().get(0).replaceAll(".*:", "")); + RedisURI.Builder builder = RedisURI.Builder.sentinel(firstNode, port, sentinel.getMaster()); + + for (int i = 1; i < sentinel.getNodes().size(); i++) { + String node = sentinel.getNodes().get(i).replaceAll(":.*", ""); + port = Integer.parseInt(sentinel.getNodes().get(i).replaceAll(".*:", "")); + builder = builder.withSentinel(node, port); + } + + redisURI = builder.build(); + } else { + redisURI = RedisURI.create(properties.getHost(), properties.getPort()); + } + + if (properties.getPassword() != null) { + redisURI.setPassword(properties.getPassword().toCharArray()); + } + + Duration timeout = properties.getTimeout(); + if (timeout != null) { + redisURI.setTimeout(timeout); + } + return redisURI; + } + + @Bean(destroyMethod = "shutdown") + ClientResources clientResources() { + return DefaultClientResources.create(); + } + + @Bean(destroyMethod = "shutdown") + RediSearchClient client(RedisURI redisURI, ClientResources clientResources) { + return RediSearchClient.create(clientResources, redisURI); + } + + @Bean(name = "rediSearchConnection", destroyMethod = "close") + StatefulRediSearchConnection connection(RediSearchClient rediSearchClient) { + return rediSearchClient.connect(); + } + + @Bean(name = "rediSearchConnectionPoolConfig") + GenericObjectPoolConfig> poolConfig(RedisProperties redisProperties) { + return configure(redisProperties, new GenericObjectPoolConfig<>()); + } + + public GenericObjectPoolConfig> configure(RedisProperties redisProperties, + GenericObjectPoolConfig> config) { + config.setJmxEnabled(false); + Pool poolProps = redisProperties.getLettuce().getPool(); + if (poolProps != null) { + config.setMaxTotal(poolProps.getMaxActive()); + config.setMaxIdle(poolProps.getMaxIdle()); + config.setMinIdle(poolProps.getMinIdle()); + if (poolProps.getMaxWait() != null) { + config.setMaxWaitMillis(poolProps.getMaxWait().toMillis()); + } + } + return config; + } + + @Bean(name = "rediSearchConnectionPool", destroyMethod = "close") + GenericObjectPool> pool( + GenericObjectPoolConfig> config, RediSearchClient client) { + return ConnectionPoolSupport.createGenericObjectPool(client::connect, config); + } + +} \ No newline at end of file