I am using lettuce driver for my elastic cache connections, my elastic cache is cluster enabled.
Due to some network restriction, my connections need to be behind a proxy so I am using an Nginx stream proxy
below is my Nginx conf
stream {
upstream grp1
{
server node1-1:8762;
server node1-2:8762;
server node1-3:8762;
}
upstream grp2
{
server node2-1:8762;
server node2-2:8762;
server node2-3:8762;
}
server {
lister 8441;
proxy_pass grp1;
}
server {
lister 8442;
proxy_pass grp2;
}
}
below is Redis template code
@Configuration
@EnableConfigurationProperties(RedisProperties.class)
public class RedisConfig {
@value("${ngnix.ip}")
private string ngnixip
@Bean
LettuceConnectionFactory lettuceConnectionFactory() {
RedisClusterConfiguration redisCluster = new RedisClusterConfiguration();
Set<RedisNode> nodes = new HashSet<>();
nodes.add(new RedisNode(ngnixip,8441);
nodes.add(new RedisNode(ngnixip,8442);
redisCluster.setClusterNodes(nodes);
redisCluster.setPassword("mypassword");
final SocketOptions socketOptions = SocketOptions.builder().connectTimeout(socketTimeout).build();
final ClientOptions clientOptions =
ClientOptions.builder().socketOptions(socketOptions).build();
LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
.commandTimeout(redisCommandTimeout)
.clientOptions(clientOptions).build();
final LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisCluster,
clientConfig);
lettuceConnectionFactory.setValidateConnection(true);
lettuceConnectionFactory.setShareNativeConnection(true)
return lettuceConnectionFactory;
}
@Bean
public RedisTemplate<Long, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Long, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
return template;
}
}
initial connection to cluster happens fine but whenever I tried to perform reds read operation using redistemplate, it discovers the actual Redis nodes(node1-1, node1-2, node1-3, node2-1, node2-2, node2-3) and uses them, that leads to connection timed out since cluster nodes are not reachable so How to override such a way that it gets always overriding with Nginx IP I have configured.