标签:
在我们的业务场景中,服务间通信的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