diamond-client獲取配置信息 DiamondManager manager = new DefaultDiamondManager("1", new ManagerListener() { @Override public Executor getExecutor() { return null; } @Override public void receiveConfigInfo(String configInfo) { System.out.println("receive config: " + configInfo); } }); String configInfo = manager.getAvailableConfigureInfomation(1000);
配置文件:
diamond.properties
diamond.port=8081 diamond.config.ip=192.168.2.183
配置文件的解析在DiamondConfigure.java的loadConfig()方法
private void loadConfig() { URL url = this.getClass().getClassLoader().getResource("diamond.properties"); if (url != null) { File file = new File(url.getFile()); Properties prop = new Properties(); try { prop.load(new FileInputStream(file)); configServerAddress = prop.getProperty(Constants.CONF_KEY_CONFIG_IP, Constants.DEFAULT_DOMAINNAME); String portStr = prop.getProperty(Constants.CONF_KEY_PORT, "8080"); try { port = Integer.parseInt(portStr); } catch (NumberFormatException nfe) { port = 8080; } //新增 configServerPort=port; } catch (IOException e) { } } }
啓動訂閱者DefaultDiamondSubscriber.java的start()方法
獲取server服務器地址在ServerAddressProcessor.java的synAcquireServerAddress()和asynAcquireServerAddress()方法
創建了一個線程每300s刷新一次,請求內容存放在System.getProperty("user.home")\diamond\ServerAddress文件中
調用diamond-server的/url.do接口獲取數據
客戶端動態讀取配置文件
間隔爲15s檢測一次
掃描順序爲:本地data文件、diamond服務端、本地snapshot文件
調用DefaultDiamondSubscriber.java的getProbeUpdateString()方法獲取請求參數,格式爲:1DEFAULT_GROUPd8a6e29458f5a2bcadc1177cd83bb4e0(dataId++group++md5)
請求diamond-server的/config.co接口,
diamond-server
contentMD5Cache的數據是TimerTaskService中通過@PostConstruct標籤被spring掃描進去的,創建線程池,每10分鐘dump一遍數據到contentMD5Cache中,diamond-server系統中維護配置內容會修改contentMD5Cache數據。
系統維護的代碼最後調用的configService.updateConfigInfo(String dataId, String group, String content)修改的。
diamond-server集羣相互同步配置
集羣服務器配置在node.properties裏面
通過發送http請求調用各個節點服務的/diamond-server/notify.do?method=notifyConfigInfo&dataId=&group=接口進行通知修改
此處存在一個問題,集羣數據同步的時候,連接不同的mysql數據庫,mysql數據庫的數據需要自己同步