转载:http://blog.csdn.net/coolyqq/article/details/50435634java
1、概况mysql
diamond是淘宝内部使用的一个管理持久配置的系统,它的特色是简单、可靠、易用,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理。web
diamond为应用系统提供了获取配置的服务,应用不只能够在启动时从diamond获取相关的配置,并且能够在运行中对配置数据的变化进行感知并获取变化后的配置数据。sql
持久配置是指配置数据会持久化到磁盘和数据库中。数据库
diamond的特色是简单、可靠、易用:浏览器
简单:总体结构很是简单,从而减小了出错的可能性。tomcat
可靠:应用方在任何状况下均可以启动,在承载淘宝核心系统并正常运行一年多以来,没有出现过任何重大故障。网络
易用:客户端使用只须要两行代码,暴露的接口都很是简单,易于理解。app
2、快速使用webapp
一、源代码检出
从如下svn地址检出diamond的源代码:
http://code.taobao.org/svn/diamond/trunk
二、server的搭建
(1)mysql
安装mysql-server的步骤请参考mysql官方文档,安装完毕后,以root用户登陆,创建用户并赋予权限,创建数据库,而后建表,语句分别以下:
create database diamond;
use diamond
CREATE TABLE `config_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data_id` varchar(100) DEFAULT NULL,
`group_id` varchar(100) DEFAULT NULL,
`content` varchar(100) DEFAULT NULL,
`md5` varchar(100) DEFAULT NULL,
`gmt_create` datetime DEFAULT NULL,
`gmt_modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
完成后,请将数据库的配置信息(IP,用户名,密码)添加到diamond-server工程的src/resources/jdbc.properties文件中的db.url,db.user,db.password属性上面,这里创建的库名,用户名和密码,必须和jdbc.properties中对应的属性相同。
(2)tomcat
tomcat是diamond server的运行容器。
tomcat的安装请参考tomcat官方文档,建议使用tomcat7
不须要对tomcat进行任何改动。
(3)diamond server
在diamond-server源代码根目录下,执行mvn clean package -Dmaven.test.skip,成功后会在diamond-server/target目录下生成diamond-server.war(若是没有安装maven,请参考maven官方文档进行安装)。
打包完成后,将diamond-server.war放在tomcat的webapps目录下。
启动tomcat,即启动了diamond-server
(4)http server
http server用来存放diamond server等地址列表,能够选用任何http server,这里以tomcat为例。
通常来说,http server和diamond server是部署在不一样机器上的,这里简单起见,将两者部署在同一个机器下的同一个tomcat的同一个应用中,注意,若是部署在不一样的tomcat中,端口号必定是8080,不能修改(因此必须部署在不一样的机器上)。
在(3)的tomcat的webapps中的diamond-server中创建文件diamond,文件内容是diamond-server的地址列表,一行一个地址,地址为IP,例如:
127.0.0.1
完成以上4步后,server端的搭建就完成了。
二、发布数据
diamond发布数据经过手工的方式进行。
在浏览器中输入http://ip:8080/diamond-server/,ip为server搭建的第(2)步中的地址,以abc为用户名,123为密码,登陆后进入后台管理界面,而后点击“配置信息管理”—— “添加配置信息”,在输入框中输入dataId、group、内容,最后点击“提交”便可。
成功后,能够在“配置信息管理”中查询到发布的数据。
三、订阅数据
diamond客户端API主要提供了订阅数据的功能.
(1)客户端获取服务端地址
获取服务端地址对客户端是透明的,客户端仅仅须要在本地进行以下域名绑定便可:
ip a.b.c
ip为前面搭建的http-server的ip
(2)建立订阅者
public class DiaMondTest {
public static void main(String[] args) {
DiamondManager manager = new DefaultDiamondManager("t_group", "t_dataid", new ManagerListener() {
public Executor getExecutor() {
System.out.println("==========getExecutor========");
return null;
}
public void receiveConfigInfo(String configInfo) {
// 客户端处理数据的逻辑
System.out.println("==========configInfo========"+configInfo);
}
});
System.out.println("==="+manager.getAvailablePropertiesConfigureInfomation(5000));
//System.out.println("==s="+configInfo);
}
}
参数的说明:
group和dataId为String类型,两者结合为diamond-server端保存数据的唯一key
ManagerListener 是客户端注册的数据监听器, 它的做用是在运行中接受变化的配置数据,而后回调receiveConfigInfo()方法,执行客户端处理数据的逻辑。若是要在运行中对变化的配置数据进行处理,就必定要注册ManagerListener
(3)获取配置数据
String configInfo = manager.getAvailableConfigureInfomation(timeout);
diamond-server端保存的配置全都为文本类型,返回给客户端的配置数据为java.lang.String类型,timeout为从网络获取配置数据的超时时间。客户端调用每次调用该方法,都可以保证获取一份最新的可用的配置数据。