今天读了下jodis的代码。
配合codis使用的。
其主要着眼点是数据源,对jedispool做了封装。
通过zookeeper上注册的codis proxy个数创建相应个数的jedispool封装为RoundRobinJedisPool,并监听节点的变化,proxy的地址会传回来,可以及时增删配置的jedispool。
但不能根据proxy自定义的配置除host,port之外的其他jedispool配置。
然后每次获取连接的时候就可以做负载均衡了,依次轮询所有jedispool拿连接。
自己封装codis的客户端时可以参考这个思路。
Update:
jodis监听的节点,参见保存在zookeeper的jodis目录下节点数据,再看源码的CodisProxyInfo类,可以知道其监听的是/codis3/codis-demo/jodis。
但这里应该监听的是/codis3/codis-demo/proxy。
proxy在启动后,除非在codis的dashboard界面手动加入此proxy配置的admin地址,否则proxy会一直waiting online。
但/codis3/codis-demo/jodis路径下会新增这个proxy的信息,虽然jodis的源码中判断了proxy是否online,但是就测试来看即使没有在dashboard手动加入此proxy的admin,注册在jodis路径下的proxy信息中的state值仍未onlien,这样判断就失效了。
这样造成的结果是:
Caused by: java.util.NoSuchElementExcepti