diamond源码解析

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()方法

diamond源码解析

diamond源码解析

获取server服务器地址在ServerAddressProcessor.java的synAcquireServerAddress()和asynAcquireServerAddress()方法

创建了一个线程每300s刷新一次,请求内容存放在System.getProperty("user.home")\diamond\ServerAddress文件中

调用diamond-server的/url.do接口获取数据

diamond源码解析

客户端动态读取配置文件

间隔为15s检测一次

扫描顺序为:本地data文件、diamond服务端、本地snapshot文件

diamond源码解析

diamond源码解析

调用DefaultDiamondSubscriber.java的getProbeUpdateString()方法获取请求参数,格式为:1DEFAULT_GROUPd8a6e29458f5a2bcadc1177cd83bb4e0(dataId++group++md5)

请求diamond-server的/config.co接口,

diamond源码解析

diamond-server

diamond源码解析

diamond源码解析

diamond源码解析

diamond源码解析

 

contentMD5Cache的数据是TimerTaskService中通过@PostConstruct标签被spring扫描进去的,创建线程池,每10分钟dump一遍数据到contentMD5Cache中,diamond-server系统中维护配置内容会修改contentMD5Cache数据。

diamond源码解析

diamond源码解析

diamond源码解析

diamond源码解析

系统维护的代码最后调用的configService.updateConfigInfo(String dataId, String group, String content)修改的。

diamond源码解析

 

diamond源码解析

diamond源码解析

diamond-server集群相互同步配置

集群服务器配置在node.properties里面

通过发送http请求调用各个节点服务的/diamond-server/notify.do?method=notifyConfigInfo&dataId=&group=接口进行通知修改

此处存在一个问题,集群数据同步的时候,连接不同的mysql数据库,mysql数据库的数据需要自己同步

 

diamond源码解析

diamond源码解析

diamond源码解析

 

diamond源码解析

diamond源码解析

diamond源码解析