转载:http://blog.csdn.net/coolyqq/article/details/50435634

一、概况

diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单、可靠、易用,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理。

diamond为应用系统提供了获取配置的服务,应用不仅可以在启动时从diamond获取相关的配置,而且可以在运行中对配置数据的变化进行感知并获取变化后的配置数据。

持久配置是指配置数据会持久化到磁盘和数据库中。

diamond的特点是简单、可靠、易用:

简单:整体结构非常简单,从而减少了出错的可能性。

可靠:应用方在任何情况下都可以启动,在承载淘宝核心系统并正常运行一年多以来,没有出现过任何重大故障。

易用:客户端使用只需要两行代码,暴露的接口都非常简单,易于理解。

二、快速使用

1、源代码检出

从以下svn地址检出diamond的源代码:

http://code.taobao.org/svn/diamond/trunk

2、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端的搭建就完成了。

2、发布数据

diamond发布数据通过手工的方式进行。

在浏览器中输入http://ip:8080/diamond-server/,ip为server搭建的第(2)步中的地址,以abc为用户名,123为密码,登录后进入后台管理界面,然后点击“配置信息管理”—— “添加配置信息”,在输入框中输入dataId、group、内容,最后点击“提交”即可。

成功后,可以在“配置信息管理”中查询到发布的数据。

3、订阅数据

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为从网络获取配置数据的超时时间。客户端调用每次调用该方法,都能够保证获取一份最新的可用的配置数据。

最新文章

  1. twemproxy - Proxy Server for Redis 安装测试
  2. MAC中设置android adb环境变量
  3. MyEclipse生成WAR包并在Tomcat下部署发布[转]
  4. badboy 之 查看回放结果
  5. iframe整理学习笔记
  6. linux下vi命令的使用
  7. Illegal resource reference: @*android resources are private and not always present
  8. Kvm虚拟化的一种打包及部署方案(采用tar包,lvm方式)
  9. 循序渐进之Spring AOP(2) - 基本概念
  10. $(function(){})简述
  11. python各种web框架对比
  12. linux学习笔记 apache php mysql +linux
  13. MySQL行转列与列转行
  14. [SCOI2007]排列
  15. Java面试题系列(三)Java new一个对象的过程中发生了什么
  16. 配置Tomcat配置路径
  17. 多态时最好将基类的析构函数设为virtual、 C++中两个类相互包含引用问题 (转载)
  18. keras、 tensor flow 教程
  19. Docker搭建 MySQL 主从复制
  20. 《JavaScript模式》一书中提到的一些坑

热门文章

  1. 时间戳 JS PHP MYSQL
  2. DRF视图集的路由设置
  3. Selenium2+python自动化47-判断弹出框存在(alert_is_present)【转载】
  4. Python爬虫Scrapy测试
  5. hdu4757(可持久化 Trie )
  6. codevs 方格取数
  7. Codeforces Round #394 (Div. 2) C. Dasha and Password(简单DP)
  8. ASP.NET Core 2.2 基础知识(十) Web服务器 - Kestrel
  9. ASP.NET Core 2.2 基础知识(五) 环境
  10. 微信小程序开发教程(九)视图层——.wxss详解