淘宝diamond使用心得 服务端+客户端+部分自己实现的代码

服务端

首先把源码下载到本地,有几个地方需要修改,需要 eclipse  + maven



diamond-server 是一个web项目 数据库用的mysql  ,注意项目中的mysql驱动版本,我本地使用:


<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>



diamond-server打成war包之前,记得修改下数据库连接配置,如下


 


user.properties中的配置是web 登陆的账号密码

都修改好以后,打成war包部署到tomcat中,启动tomcat,访问http://ip:8080/diamond-server/

如下,点击配置信息管理,可以添加,查询,修改配置信息,信息格式为properties,可以直接把properties的内容复制粘贴过来




注意:部署好以后在tomcat中的webapps/diamond-server下新建文件diamond,文件内容为web部署的ip,有多个的话,一行一个

客户端

diamond-client 中是客户端代码 ,最终以jar包的形式被引用 ,在打包之前需要修改几个地方

需要修改的文件路径:/diamond-utils/src/main/java/com/taobao/diamond/common/Constants.java

diamond-utils 被服务端和客户端代码引用,在Constants.java中需要修改访问路径URI,最终如下

  public static final String HTTP_URI_FILE = "/diamond-server/config.co";
  public static final String CONFIG_HTTP_URI_FILE = "/diamond-server/diamond";



修改好以后打成jar包。



引用项目

这个项目就是我们自己的工程,我们需要把这个项目的配置放到配置中心,以后修改都在配置中心,如果配置中心的配置发生改变,项目能感知到并自动重新加载配置到内存,

如果有些配置是需要服务重启才能生效的,那必须重启服务。

先在我们的项目引入上面打好的jar包  diamond-client,然后写几个小段的代码,这里依赖spring,写好以后调用TshPropertyPlaceholderConfigurer 中的

loadOneConfigFromDiamond (单个配置)或者 loadMultConfigFromDiamond(多个配置)



package com.zhc365.tsh.test;


import java.io.IOException;
import java.io.StringReader;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Executor;


import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;


import com.taobao.diamond.manager.DiamondManager;
import com.taobao.diamond.manager.ManagerListener;
import com.taobao.diamond.manager.impl.DefaultDiamondManager;


/**
 * 
 * @author yanzh 2015-09-10
 *
 */
public class TshPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {


private long timeOut = 3000;
Properties properties = new Properties();


/**
* 
* @param group
*            配置中心的组名
* @param dataId
*            配置中心的ID
* 
*/
public void loadOneConfigFromDiamond(String group, String dataId) {
DiamondManager manager = new DefaultDiamondManager(group, dataId, new ManagerListener() {
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("22222222:" + configInfo);
loadConfig(configInfo);
}


@Override
public Executor getExecutor() {
return null;
}
});
String configInfo = manager.getAvailableConfigureInfomation(timeOut);
System.out.println("11111111:" + configInfo);
loadConfig(configInfo);
}


/**
* @param list
*            map格式 为: map.put("group","aaa"); map.put("dataId","abc");
*            key一定要书写正确,list中可以放多个map,用来获取多组配置
*/
public void loadMultConfigFromDiamond(List<Map<String, String>> list) {
if (null == list || list.size() < 1)
return;
String group = "";
String dataId = "";
for (Map<String, String> map : list) {
group = map.get("group");
dataId = map.get("dataId");
loadOneConfigFromDiamond(group, dataId);
}


}


private void loadConfig(String configInfo) {
try {
properties.load(new StringReader(configInfo));
} catch (IOException e) {
// System.out.println("装载properties失败:" + configInfo);
throw new RuntimeException("装载properties失败:" + configInfo, e);
}
this.setProperties(properties);


}

}



如何启动,根据你的项目情况来,可以用spring容器来启动,也可能用普通的servlet启动,还可以用main方法启动,如果有些配置是服务启动时需要用到的,那必须先初始化这些配置,比如



在TshDiamondClientTest 中,调用了TshPropertyPlaceholderConfigurer 中的方法
package com.zhc365.tsh.test;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class TshDiamondClientTest extends TshPropertyPlaceholderConfigurer{


void init(){
//单个配置
this.loadOneConfigFromDiamond("tsh_server", "10001");

//多个配置
// List<Map<String,String>> list = new ArrayList<>();
// Map<String,String> map = new HashMap<>();
// map.put("group", "tsh_server");
// map.put("dataId", "10001");
// list.add(map);
// 
// Map<String,String> map1 = new HashMap<>();
// map1.put("group", "tsh_server");
// map1.put("dataId", "10002");
// list.add(map1);
// 
// Map<String,String> map2 = new HashMap<>();
// map2.put("group", "tsh_server");
// map2.put("dataId", "10003");
// list.add(map2);

// this.loadConfigFromDiamondMult(list);

}

}






  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值