轉載: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爲從網絡獲取配置數據的超時時間。客戶端調用每次調用該方法,都可以保證獲取一份最新的可用的配置數據。