diamond淘宝框架使用
一、概況
diamond是淘寶內(nèi)部使用的一個(gè)管理持久配置的系統(tǒng),它的特點(diǎn)是簡單、可靠、易用,目前淘寶內(nèi)部絕大多數(shù)系統(tǒng)的配置,由diamond來進(jìn)行統(tǒng)一管理。
diamond為應(yīng)用系統(tǒng)提供了獲取配置的服務(wù),應(yīng)用不僅可以在啟動(dòng)時(shí)從diamond獲取相關(guān)的配置,而且可以在運(yùn)行中對(duì)配置數(shù)據(jù)的變化進(jìn)行感知并獲取變化后的配置數(shù)據(jù)。
持久配置是指配置數(shù)據(jù)會(huì)持久化到磁盤和數(shù)據(jù)庫中。
diamond的特點(diǎn)是簡單、可靠、易用:
簡單:整體結(jié)構(gòu)非常簡單,從而減少了出錯(cuò)的可能性。
可靠:應(yīng)用方在任何情況下都可以啟動(dòng),在承載淘寶核心系統(tǒng)并正常運(yùn)行一年多以來,沒有出現(xiàn)過任何重大故障。
易用:客戶端使用只需要兩行代碼,暴露的接口都非常簡單,易于理解。
二、快速使用
1、源代碼檢出
從以下svn地址檢出diamond的源代碼:
http://code.taobao.org/svn/diamond/trunk
2、server的搭建
(1)MySQL
安裝mysql-server的步驟請(qǐng)參考mysql官方文檔,安裝完畢后,以root用戶登錄,建立用戶并賦予權(quán)限,建立數(shù)據(jù)庫,然后建表,語句分別如下:
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;
完成后,請(qǐng)將數(shù)據(jù)庫的配置信息(IP,用戶名,密碼)添加到diamond-server工程的src/resources/jdbc.properties文件中的db.url,db.user,db.password屬性上面,這里建立的庫名,用戶名和密碼,必須和jdbc.properties中對(duì)應(yīng)的屬性相同。
(2)tomcat
tomcat是diamond?server的運(yùn)行容器。
tomcat的安裝請(qǐng)參考tomcat官方文檔,建議使用tomcat7
不需要對(duì)tomcat進(jìn)行任何改動(dòng)。
(3)diamond?server
在diamond-server源代碼根目錄下,執(zhí)行mvn?clean?package?-Dmaven.test.skip,成功后會(huì)在diamond-server/target目錄下生成diamond-server.war(如果沒有安裝maven,請(qǐng)參考maven官方文檔進(jìn)行安裝)。
打包完成后,將diamond-server.war放在tomcat的webapps目錄下。
啟動(dòng)tomcat,即啟動(dòng)了diamond-server
(4)http?server
http?server用來存放diamond?server等地址列表,可以選用任何http?server,這里以tomcat為例。
一般來講,http server和diamond server是部署在不同機(jī)器上的,這里簡單起見,將二者部署在同一個(gè)機(jī)器下的同一個(gè)tomcat的同一個(gè)應(yīng)用中,注意,如果部署在不同的tomcat中,端口號(hào)一定是8080,不能修改(所以必須部署在不同的機(jī)器上)。
在(3)的tomcat的webapps中的diamond-server中建立文件diamond,文件內(nèi)容是diamond-server的地址列表,一行一個(gè)地址,地址為IP,例如:
127.0.0.1
完成以上4步后,server端的搭建就完成了。
2、發(fā)布數(shù)據(jù)
diamond發(fā)布數(shù)據(jù)通過手工的方式進(jìn)行。
在瀏覽器中輸入http://ip:8080/diamond-server/,ip為server搭建的第(2)步中的地址,以abc為用戶名,123為密碼,登錄后進(jìn)入后臺(tái)管理界面,然后點(diǎn)擊“配置信息管理”——?“添加配置信息”,在輸入框中輸入dataId、group、內(nèi)容,最后點(diǎn)擊“提交”即可。
成功后,可以在“配置信息管理”中查詢到發(fā)布的數(shù)據(jù)。
3、訂閱數(shù)據(jù)
diamond客戶端API主要提供了訂閱數(shù)據(jù)的功能.
(1)客戶端獲取服務(wù)端地址
獲取服務(wù)端地址對(duì)客戶端是透明的,客戶端僅僅需要在本地進(jìn)行如下域名綁定即可:
ip ? ?a.b.c
ip為前面搭建的http-server的ip
(2)創(chuàng)建訂閱者
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) {
// 客戶端處理數(shù)據(jù)的邏輯
System.out.println("==========configInfo========"+configInfo);
}
});
System.out.println("==="+manager.getAvailablePropertiesConfigureInfomation(5000));
?
//System.out.println("==s="+configInfo);
}
}
參數(shù)的說明:
group和dataId為String類型,二者結(jié)合為diamond-server端保存數(shù)據(jù)的惟一key
ManagerListener?是客戶端注冊(cè)的數(shù)據(jù)監(jiān)聽器,?它的作用是在運(yùn)行中接受變化的配置數(shù)據(jù),然后回調(diào)receiveConfigInfo()方法,執(zhí)行客戶端處理數(shù)據(jù)的邏輯。如果要在運(yùn)行中對(duì)變化的配置數(shù)據(jù)進(jìn)行處理,就一定要注冊(cè)ManagerListener
(3)獲取配置數(shù)據(jù)
String?configInfo?=?manager.getAvailableConfigureInfomation(timeout);
diamond-server端保存的配置全都為文本類型,返回給客戶端的配置數(shù)據(jù)為Java.lang.String類型,timeout為從網(wǎng)絡(luò)獲取配置數(shù)據(jù)的超時(shí)時(shí)間。客戶端調(diào)用每次調(diào)用該方法,都能夠保證獲取一份最新的可用的配置數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的diamond淘宝框架使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大规模分布式跟踪系统的理论
- 下一篇: sharding-jdbc整合mybat