2016-08-04 6 views
0

Ich habe ein Spring Boot-Projekt mit Redis Cluster-Konfiguration mit Jedis. Die Konfigurationsdateien sind wie folgt:Spring Boot Actuator: Warum ist der Health Status des Redis Clusters nicht korrekt?

application.yml Datei:

enter image description here

RedisClusterConfig.java Datei:

@Configuration 

public class RedisClusterConfig {

private final Logger logger = LoggerFactory.getLogger(this.getClass()); 

@Value("${redis.cluster.host1}") private String HOST1; 
@Value("${redis.cluster.port1}") private Integer PORT1; 

@Value("${redis.cluster.host2}") private String HOST2; 
@Value("${redis.cluster.port2}") private Integer PORT2; 

@Value("${redis.cluster.host3}") private String HOST3; 
@Value("${redis.cluster.port3}") private Integer PORT3; 

@Value("${redis.cluster.host4}") private String HOST4; 
@Value("${redis.cluster.port4}") private Integer PORT4; 

@Value("${redis.cluster.host5}") private String HOST5; 
@Value("${redis.cluster.port5}") private Integer PORT5; 

@Value("${redis.cluster.host6}") private String HOST6; 
@Value("${redis.cluster.port6}") private Integer PORT6; 

@Bean 
public JedisCluster jedisCluster() { 
    Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); 
    //Jedis Cluster will attempt to discover cluster nodes automatically 
    jedisClusterNodes.add(new HostAndPort(HOST1, PORT1)); 
    jedisClusterNodes.add(new HostAndPort(HOST2, PORT2)); 
    jedisClusterNodes.add(new HostAndPort(HOST3, PORT3)); 

    if(StringUtils.isNotBlank(HOST4)){ 
     jedisClusterNodes.add(new HostAndPort(HOST4, PORT4)); 
    }else{ 
     logger.warn("jedis cluster HOST4 not configured."); 
    } 

    if(StringUtils.isNotBlank(HOST5)){ 
     jedisClusterNodes.add(new HostAndPort(HOST5, PORT5)); 
    }else{ 
     logger.warn("jedis cluster HOST5 not configured."); 
    } 

    if(StringUtils.isNotBlank(HOST6)){ 
     jedisClusterNodes.add(new HostAndPort(HOST6, PORT6)); 
    }else{ 
     logger.warn("jedis cluster HOST6 not configured."); 
    } 
    JedisCluster jc = new JedisCluster(jedisClusterNodes, new JedisPoolConfig()); 
    return jc; 
} 

}

Mit dieser Konfiguration funktioniert alles gut. Ich kann Daten zum/vom Redis-Cluster schreiben/lesen. Wenn ich jedoch auf zugreife, um den Status der Aktuatorintegrität zu erhalten, gibt es das Ergebnis wie folgt zurück:

{"status": "DOWN", "diskSpace": {"status": "UP", "total": 120031539200 , "frei": 33381117952, "threshold": 10485760}, "redis": {"status": "DOWN", "error": "org.springframework.data.redis.RedisConnectionFailureException: Kann keine Jedis-Verbindung erhalten; verschachtelte Ausnahme ist redis.clients.jedis.exceptions.JedisConnectionException: Konnte keine Ressource aus dem Pool bekommen "}," mongo ": {" status ":" UP "," version ":" 3.2.3 "}," db ": { "status": "UP", "dataSource1": {"Status": "UP", "Datenbank": "MySQL", "Hallo": 1}, "dataSource2": {"status": "UP", " datenbank ":" MySQL "," hallo ": 1}," dataSource3 ": {" status ":" UP "," datenbank ":" MySQL "," hallo ": 1}}}

Wir können sehen die Fehlerhinweise über Jedis.

BTW, die damit verbundenen Abhängigkeiten in pom.xml:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.4.0.RELEASE</version> 
</parent> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-redis</artifactId> 
    </dependency> 

Gibt es eine Sache, die ich vermissen kann den/Gesundheitsstatus wieder auf "UP" zu bekommen? Vielen Dank!

Weitere Informationen: Ich verfolgt den Start und festgestellt, dass der RedisHealthIndicator eine falsche Fabrik mit Host = Localhost und Port = 6379 übergeben, die die konfigurierten Cluster Hosts und Ports sein sollte?

public RedisHealthIndicator(RedisConnectionFactory connectionFactory) { 
    Assert.notNull(connectionFactory, "ConnectionFactory must not be null"); 
    this.redisConnectionFactory = connectionFactory; 
} 
+0

die Ausnahme Bitte teilen. 'JedisConnectionException: Eine Ressource aus dem Pool konnte nicht abgerufen werden, hat immer eine Grundursache, die im Post nicht sichtbar ist. – mp911de

+0

Ich kann die Ausnahmedetails nicht erhalten. Aber ich fand, dass der folgende Code eine falsche Fabrik mit Host während der Inbetriebnahme übergeben ist localhost und Port ist 6379, die das Cluster-Host und Port sein sollte: '\t öffentlicher RedisHealthIndicator (RedisConnectionFactory connection) { \t \t Assert.notNull (connection , "ConnectionFactory darf nicht null sein"); \t \t this.redisConnectionFactory = connectionFactory; \t} ' –

Antwort

1

Schließlich habe ich das Problem gelöst durch Re-config die redis wie folgt:

spring: redis: cluster: nodes: - 192.168.0.17:6390 - 192.168.0.17:6391 - 192.168.0.17:6392 - 192.168.0.9:6390 - 192.168.0.9:6391 - 192.168.0.9:6392

+0

Was ist, wenn ich keinen Cluster verwende, und eine einfache lokale Installation von Redis. Muss ich noch 'spring.redis.cluster.nodes = 127.0.0.1: 6379' angeben? –

+0

In diesem Fall glaube ich, dass Sie es auf eine andere Weise konfigurieren sollten, wie: spring.redis.host = localhost, spring.redis.port = 6379 –

Verwandte Themen