Jodis报错- JedisException- Proxy list empty

先把代码贴上来

import io.codis.jodis.JedisResourcePool;
import io.codis.jodis.RoundRobinJedisPool;
import redis.clients.jedis.Jedis;
/**
 * @author wujiang
 * @version 1.0.0
 * @date 2017/7/12
 */
public class CodisDemo {
    public static void main(String[] args) {
        JedisResourcePool jedisPool = RoundRobinJedisPool.create()
                .curatorClient("10.0.2.15:2181", 30000).zkProxyDir("/jodis/codis-wujiang").build();
        try (Jedis jedis = jedisPool.getResource()) {
            //省略代码
        }
    }
}

运行上面的代码时,一直报错

Redis.clients.jedis.exceptions.JedisException: Proxy list empty

目前已经解决,因为每个人报这个错误的原因不同,这里列出可能的原因,如果遇到了可以逐一排查一下:

1 检查proxy是否已经成功的添加到集群中,在zk中就可以查看。/jodis/codis-productName路径下,看是否有对应的proxy。

这里写图片描述

2 proxy.conf中,jodis_addr有没有正确填写,如下所示

jodis_name = "zookeeper"
jodis_addr = "10.0.2.15:2181"

3 jodis在maven仓库中有两个,一个是io.codis.jodis,一个是com.wandouLabs.jodis,一定要用第一个

4 我当时的codis.json文件是用命令自动生成的,里面的内容如下:

[
    {
        "name": "codis-wujiang",
        "dashboard": "cnsz22vla888.novalocal:18080"
    }
]

后来发现添加到页面的proxy是novalocal:19000,而不是ip地址。fe是通过dashboard去找proxy的,如果dashboard都找不到,肯定更找不到proxy了。后来我把codis.json等配置文件中的参数改成明确的ip,直到页面上添加成功的proxy变成如下所示的ip地址,而不是novalocal。这个cnsz22vla888.novalocal就是操作系统的主机名称,看一看Codis源码解析——proxy的启动中的proxy-token信息就知道

这里写图片描述

5 所有Slot都要分配到某个group。如果有的slot没有得到分配,会报另一个错误

如果以上五个点检查过都没有问题,那你的jodis应该是可以正常运行了

说明
如有转载,请注明出处
http://blog.csdn.net/antony9118/article/details/76505481

你可能感兴趣的:(codis,Codis源码解析)