标签:
在我们的业务场景中,服务间通信的url是通过zookeeper来管理的。我们服务间,当A和B服务需要建立连接时,服务启动时,首先回去建立和ZK的连接,然后在事先定义好的节点获取url列表,并且注册事件,zk节点发生变化时会通知服务,根据事件类型增加或删除服务间的连接(A会维护一份和B每一台机子的连接map),然后A会采用不同的策略去选择连接进行和B的通信
我们服务的zk节点监控:

添加zk变动的事件处理
final PathChildrenCache pathChildrenCache = new PathChildrenCache(zkClient, servicePath, true);
pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {
@Override
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
String path = event.getData().getPath();
String service = path.replaceAll(servicePath + "/", "");
synchronized (ZKAutoTcpConnector.this) {
switch (event.getType()) {
case CHILD_ADDED:
openConnection(service);
break;
case CHILD_REMOVED:
TCPConnector connector = connectors.get(service);
if (connector != null && !connector.isActive())
closeConnection(service);
}
}
}

配置中心其实原理和集群管理很类似,也是启动时会去先读取固定节点的配置,然后设置监听变动
dubbo不做多说,它可以通过zk作为配置中心,并且在本地生成缓存
标签:
原文地址:http://my.oschina.net/zhenglingfei/blog/408601