opentracing-contrib / java-redis-client

OpenTracing Instrumentation for Redis Client

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

jedis cluster get connection error

crazycarry opened this issue · comments

Hi,when i do tracing with redis,there is a problem.
my config is :
@bean
public RedisConnectionFactory connectionFactory() {

    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(100);
    jedisPoolConfig.setMaxIdle(50);
    jedisPoolConfig.setMinIdle(20);
    jedisPoolConfig.setMaxWaitMillis(200);
    jedisPoolConfig.setTestOnBorrow(true);
    jedisPoolConfig.setTestOnReturn(true);
    jedisPoolConfig.setTestWhileIdle(true);

    JedisClientConfiguration clientConfig = JedisClientConfiguration.builder()
            .connectTimeout(Duration.ofMillis(20))
            .readTimeout(Duration.ofMillis(20)).usePooling().poolConfig(jedisPoolConfig)
            .build();
    if(redisContants.REDIS_TYPE.equals("single")) {
        RedisStandaloneConfiguration  redisConfiguration=new RedisStandaloneConfiguration(redisContants.REDIS_HOST.split(":")[0], redisContants.REDIS_PORT);
        //return new JedisConnectionFactory(new RedisStandaloneConfiguration(redisContants.REDIS_HOST.split(":")[0], redisContants.REDIS_PORT),clientConfig);
        return new TracingRedisConnectionFactory(new JedisConnectionFactory(redisConfiguration,clientConfig), new TracingConfiguration.Builder(tracer).build());
    }else {
        RedisClusterConfiguration redisClusterConfiguration= new RedisClusterConfiguration(clusterProperties.getNodes());
        return new TracingRedisConnectionFactory(new JedisConnectionFactory(redisClusterConfiguration, clientConfig), new TracingConfiguration.Builder(tracer).build());
       //return new JedisConnectionFactory(new RedisClusterConfiguration(clusterProperties.getNodes()), clientConfig);
    }
}

witnout tracing, everything works! when i do tracing in test env,this is standalone mode,this works too,when do it in cluster env,cannt get a jedis cluster connection.when i debug it,find spring redistemplate get a connection from a method called getconnection,just like jedis ,but there TracingRedisFactory class only do the right thing in standalone mode,do it should implement a method like jedisFactory .
public boolean isRedisClusterAware() {
return RedisConfiguration.isClusterConfiguration(configuration);
}