diamond源码阅读-获取服务器列表
2016-11-07 00:00
465 查看
serverAddressProcessor
public synchronized void start() { if (isRun) { return; } isRun = true; initHttpClient();//初始化HttpClient if (this.diamondConfigure.isLocalFirst()) { acquireServerAddressFromLocal();//如果是本地,从本地获取服务器列表 } else { synAcquireServerAddress(); //如果不再异步每隔一段通过域名时间去取diamondIpList,注释掉下面这行 //asynAcquireServerAddress(); asynAcquireServerAddress(); }
1 initHttpClinet()
private void initHttpClient() { HostConfiguration hostConfiguration = new HostConfiguration(); SimpleHttpConnectionManager connectionManager = new SimpleHttpConnectionManager(); connectionManager.closeIdleConnections(5000L);//空闲时间 HttpConnectionManagerParams params = new HttpConnectionManagerParams(); params.setStaleCheckingEnabled(diamondConfigure.isConnectionStaleCheckingEnabled()); params.setConnectionTimeout(diamondConfigure.getConnectionTimeout()); connectionManager.setParams(params); configHttpClient = new HttpClient(connectionManager); configHttpClient.setHostConfiguration(hostConfiguration); }
2 acquireServerAddressFromLocal
protected void acquireServerAddressFromLocal() { if (!isRun) { throw new RuntimeException("ServerAddressProcessor不在运行状态,无法同步获取服务器地址列表"); } if (MockServer.isTestMode()) { diamondConfigure.addDomainName("测试模式,没有使用的真实服务器"); return; } int acquireCount = 0; if (diamondConfigure.getDomainNameList().size() == 0) { reloadServerAddresses(); if (diamondConfigure.getDomainNameList().size() == 0) { if (!acquireServerAddressOnce(acquireCount)) {//从本地获取 发送http请求 acquireCount++; if (acquireServerAddressOnce(acquireCount)) {//从服务器获取 // 存入本地文件 storeServerAddressesToLocal(); log.info("在同步获取服务器列表时,向日常ConfigServer服务器获取到了服务器列表"); } else { throw new RuntimeException("当前没有可用的服务器列表"); } } else { log.info("在同步获取服务器列表时,向线上ConfigServer服务器获取到了服务器列表"); // 存入本地文件 storeServerAddressesToLocal(); } } else { log.info("在同步获取服务器列表时,由于本地指定了服务器列表,不向ConfigServer服务器同步获取服务器列表"); } } }
3 类似第2步
protected void synAcquireServerAddress() { if (!isRun) { throw new RuntimeException("ServerAddressProcessor不在运行状态,无法同步获取服务器地址列表"); } if (MockServer.isTestMode()) { diamondConfigure.addDomainName("测试模式,没有使用的真实服务器"); return; } if (reloadServerAddresses()) { log.info("成功从本地获取Diamond地址列表"); return ; } int acquireCount = 0; if (diamondConfigure.getDomainNameList().size() == 0) { if (!acquireServerAddressOnce(acquireCount)) { acquireCount++; if (acquireServerAddressOnce(acquireCount)) { // 存入本地文件 storeServerAddressesToLocal(); log.info("在同步获取服务器列表时,向日常ConfigServer服务器获取到了服务器列表"); } else { log.info("从本地获取Diamond地址列表"); reloadServerAddresses(); if (diamondConfigure.getDomainNameList().size() == 0) throw new RuntimeException("当前没有可用的服务器列表"); } } else { log.info("在同步获取服务器列表时,向线上ConfigServer服务器获取到了服务器列表"); // 存入本地文件 storeServerAddressesToLocal(); } } if (diamondConfigure.getDomainNameList().size() == 0) { throw new RuntimeException("当前没有可用的服务器列表"); } }
4 开线程获取服务器地址列表
protected void asynAcquireServerAddress() { if (MockServer.isTestMode()) { return; } this.scheduledExecutor.schedule(new Runnable() { public void run() { if (!isRun) { log.warn("ServerAddressProcessor不在运行状态,无法异步获取服务器地址列表"); return; } int acquireCount = 0; if (!acquireServerAddressOnce(acquireCount)) { acquireCount++; if (acquireServerAddressOnce(acquireCount)) { // 存入本地文件 storeServerAddressesToLocal(); } } else { // 存入本地文件 storeServerAddressesToLocal(); } asynAcquireServerAddress(); } }, asynAcquireIntervalInSec, TimeUnit.SECONDS); }
5 获取到服务器列表后
this.diamondConfigure.setDomainNameList(newDomainNameList);
相关文章推荐
- diamond源码阅读-获取服务器列表
- diamond源码阅读-获取服务器列表
- 获取Sql服务器列表
- linux 环境下 用gethostbyname函数获取 DNS的服务器列表 名称 IP
- launcher修改--获取应用列表launcher源码解析
- [转]C# 获取 SQL服务器列表
- 获取ftp服务器文件和目录列表
- 获取Sql服务器列表 (C#)
- 获取服务器的所有数据库名称列表
- Android中获取后台正在运行的应用列表(附源码)
- C#获取指定数据库服务器下某用户可访问的数据库列表
- C#_获取 SQL服务器列表
- 获取Sql服务器列表 (C#)
- C# 获取 SQL服务器列表
- 获取邮箱通讯录,msn好友列表的C#源码
- C# 获取 SQL服务器列表
- 获取局域网内SQL Server服务器列表
- flex在线mp3播放器(一)通过webservice 与服务器通讯,获取mp3列表
- 使用Apache 的 FTP Client获取FTP服务器上的文件列表FTP response 421 received.Server closed connection问题的解决
- 利用swiz框架从服务器获取图片列表并显示的实例