Данные Redis Spring с листьями салата: com.lambdaworks.redis.RedisCommandExecutionException: ошибка MOVED - PullRequest
0 голосов
/ 21 ноября 2018

Я использую AWS ElastiCache (Redis) в режиме кластера.У меня есть две реализации для подключения к ElastiCache.Одной из реализаций является непосредственное использование собственного драйвера Lettuce, а другой - использование данных Spring с Lettuce в качестве нижнего драйвера.AWS ElastiCache имеет конечную точку конфигурации кластера.Я хочу использовать эту конечную точку для подключения к ElastiCache.Я могу успешно подключиться к ElastiCache, используя конечную точку кластера с собственной реализацией драйвера Lettuce, но получаю ошибку ниже при использовании данных Spring с конечной точкой кластера

Данные Spring: 1.8.9-RELEASE (Использование более высокой версии Springне вариант)

Салат: 4.5.0-FINAL

@Bean
public LettuceConnectionFactory redisConnectionFactory() {
    LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
    lettuceConnectionFactory.setHostName(<cluster_endpoint>);
    lettuceConnectionFactory.setPort();
    lettuceConnectionFactory.setUseSsl(Boolean.valueOf(useSsl));
    //lettuceConnectionFactory.setPassword(password);
    return lettuceConnectionFactory;
}

Ошибка:

Caused by: org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is com.lambdaworks.redis.RedisCommandExecutionException: MOVED 12894 cache---.usw2.cache.amazonaws.com:6379
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50)
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:48)
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41)

Работает нормально в следующих двух сценариях -
1)Я использую конечные точки узла кластера и внедряю в LettuceConnectionFactory через RedisClusterConfiguration.
2) Если я использую салат в качестве прямой реализации (не через данные Spring), используя StatefulRedisClusterConnection.

В чем может быть причина двух вышеупомянутых ошибок?Я бы предпочел использовать салат с данными Spring, используя конечную точку конфигурации кластера.

1 Ответ

0 голосов
/ 01 декабря 2018

Ниже приведено решение для подключения к кластеру Elasticache Redis с использованием Spring Data -

Использование конечной точки конфигурации кластера ElastiCache:

@Bean
public RedisClusterConfiguration redisClusterConfiguration() {
  RedisClusterConfiguration clusterConfiguration = new 
  RedisClusterConfiguration();
  clusterConfiguration.clusterNode("host", port);
  new LettuceConnectionFactory(clusterConfiguration);
}

Использование конечных точек узла ElastiCache:

@Bean
public RedisClusterConfiguration redisClusterConfiguration() {
    RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration()
            .clusterNode("redis-cluster----0001-001.redis-cluster---.usw2.cache.amazonaws.com",6379)
            .clusterNode("redis-cluster----0001-002.redis-cluster---.usw2.cache.amazonaws.com",6379)
            .clusterNode("redis-cluster----0001-003.redis-cluster---.usw2.cache.amazonaws.com",6379)
            .clusterNode("redis-cluster----0001-004.redis-cluster---.usw2.cache.amazonaws.com",6379);
    return clusterConfiguration;
}

Спасибо Марку Палуху, который ответил на мою проблему на форуме Spring Data.Вот деталь - https://jira.spring.io/browse/DATAREDIS-898

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...