Redis кластер не работает с приложением SpringBoot + JPA - PullRequest
0 голосов
/ 13 января 2019

Я делаю poc (Redis + springboot + jpa), когда я устанавливаю свойство Redis setEnableTransactionSupport (true), тогда исключение Transaction не поддерживается в clustermode, когда я устанавливаю setEnableTransactionSupport (false) во время получения redisTemplate, а затем исключения ресурса грядет бассейн.

@ Примечание. Эта проблема возникает, когда я устанавливаю Redis и весеннюю загрузку на другом компьютере. У меня 6 узлов, 3 из которых являются главными, а 3 - подчиненными.

Но когда я настраиваю целое на одной машине (весна + Redis), то все работает нормально.

ниже мои зависимости:

[<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>]

[<groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
        <type>jar</type>]

Я попробовал то, что было предложено в ссылке ниже: Jedis, Не удается получить соединение с Jedis: невозможно получить ресурс из пула ниже моя конфигурация для Redis Connection factory:

## Redis Properties(application.properties)
spring.redis.cluster.nodes=127.0.0.1:7000,127.0.0.1:7001,127.0.0.1:7002

RedisClusterConfigProp.java

@Component
@ConfigurationProperties(value = "spring.redis.cluster")
public class RedisClusterConfigProp {
List<String> nodes;
/**
 * @return the nodes
 */
public List<String> getNodes() {
    return nodes;
}

/**
 * @param nodes
 * the nodes to set
 */
public void setNodes(List<String> nodes) {
    this.nodes = nodes;
}

}

RedisClusterConfigration.java

@Configuration
public class RedisClusterConfigration {

@Autowired
public RedisClusterConfigProp clusterConfigProp;

@Bean
public RedisConnectionFactory redisConnectionFactory() {
    JedisConnectionFactory jedisConnFac = new JedisConnectionFactory(
            new RedisClusterConfiguration(clusterConfigProp.getNodes()), new JedisPoolConfig());
    jedisConnFac.getPoolConfig().setMaxIdle(40);
    jedisConnFac.getPoolConfig().setMinIdle(20);
    return jedisConnFac;
}

@Bean
public RedisTemplate redisTemplate() {
    RedisTemplate template = new RedisTemplate();
    template.setConnectionFactory(redisConnectionFactory());
    template.setEnableTransactionSupport(false);
    return template;
}

1 Ответ

0 голосов
/ 14 января 2019

Если подключение к узлу выполнено успешно, но не удается создать подключение (для ч / б из) из пула («Не удалось получить ресурс из пула» и т. Д.), Возможно, это связано с тем, что текущий мастер находится на другом узле (который является вероятно настроен во время установки).

Если в этом случае используется redis sentinel (не кластер redis), для подключения к стражам будет использоваться список портов ip: (в файле конфигурации), но ip: порт текущего мастера (не тот, что в файле конфигурации) будет другим. , эти настройки порта ip: предоставляются во время установки или могут быть настроены позже.

...