以下是轉載自網上資料,但是根據步驟可以搭建出diamond配置中心服務器。
項目中需要用到diamond的理由是, 項目中使用了很多定時任務和異步任務。而且這些定時任務和異步任務都是分布式的安排在多個服務器上運行的。 有時候其中一台服務器任務太重會導致效率低甚至一些問題,因此這些任務的配置會經常的改動。配置的改動就會需要重新部署工程項目。
Diamond就能很好的解決這個問題, 把配置文件部署到另外一個單獨的服務器上(diamond-server配置中心),然后工程項目去監聽這個配置,發現配置有改動,就重新加載配置部分。相當於把定時任務和異步任務的模塊重新啟動,其他部分還是繼續在運行的。
比如: 創建一個java類,繼承InitializingBean接口,重寫afterPropertiesSet方法, 表示在這個java bean初始化的時候,一定會調用到afterPropertiesSet。在這個方法中,添加對配置中心的監聽
@Override
public
void
afterPropertiesSet()
throws
Exception {
this
.initConfig();
}
private
void
initConfig() {
// 通過配置中心推送配置消息
new
DefaultDiamondManager(GROUP_NAME, DataIdEnum.TASK_CONFIG.getName(),
new
ManagerListener() {
public
void
receiveConfigInfo(String configInfo) {
if
(StringUtil.isNotBlank(configInfo)) {
try
{
Document doc = DocumentHelper.parseText(StringUtil.trim(configInfo));
parseConfig(doc);
restart();
}
catch
(DocumentException e) {
logger.error(e.getMessage(), e);
}
}
}
public
Executor getExecutor() {
return
null
;
}
});
}
|
淘寶JAVA中間件Diamond詳解---簡介&快速使用
大家好,今天開始為大家帶來我們通用產品團隊的產品 —— diamond的專題,本次為大家介紹diamond的概況和快速使用。
一、概況
diamond是淘寶內部使用的一個管理持久配置的系統,它的特點是簡單、可靠、易用,目前淘寶內部絕大多數系統的配置,由diamond來進行統一管理。
diamond為應用系統提供了獲取配置的服務,應用不僅可以在啟動時從diamond獲取相關的配置,而且可以在運行中對配置數據的變化進行感知並獲取變化后的配置數據。
持久配置是指配置數據會持久化到磁盤和數據庫中。
diamond的特點是簡單、可靠、易用:
簡單:整體結構非常簡單,從而減少了出錯的可能性。
可靠:應用方在任何情況下都可以啟動,在承載淘寶核心系統並正常運行一年多以來,沒有出現過任何重大故障。
易用:客戶端使用只需要兩行代碼,暴露的接口都非常簡單,易於理解。
二、快速使用
1、源代碼檢出
從以下svn地址檢出diamond的源代碼:
http://code.taobao.org/svn/diamond/trunk
2、server的搭建
(1)mysql
安裝mysql-server的步驟請參考mysql官方文檔,安裝完畢后,建立數據庫,然后建立兩張表,建表語句分別如下:
create table config_info (
`id` bigint(64) unsigned NOT NULL auto_increment,
`data_id` varchar(255) NOT NULL default ’ ’,
`group_id` varchar(128) NOT NULL default ’ ’,
`content` longtext NOT NULL,
`md5` varchar(32) NOT NULL default ’ ’,
`src_ip` varchar(20) default NULL,
`src_user` varchar(20) default NULL,
`gmt_create` datetime NOT NULL default ’2010-05-05 00:00:00′,
`gmt_modified` datetime NOT NULL default ’2010-05-05 00:00:00′,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_config_datagroup` (`data_id`,`group_id`)
);
create table group_info (
`id` bigint(64) unsigned NOT NULL auto_increment,
`address` varchar(70) NOT NULL default ’ ’,
`data_id` varchar(255) NOT NULL default ’ ’,
`group_id` varchar(128) NOT NULL default ’ ’,
`src_ip` varchar(20) default NULL,
`src_user` varchar(20) default NULL,
`gmt_create` datetime NOT NULL default ’2010-05-05 00:00:00′,
`gmt_modified` datetime NOT NULL default ’2010-05-05 00:00:00′,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_group_address` (`address`,`data_id`,`group_id`)
);
建表完成后,請將數據庫的配置信息添加到diamond-server工程的src/resources/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目錄下。
(4)http server
http server用來存放diamond server等地址列表,可以選用任何http server,這里以tomcat為例。
安裝tomcat的步驟請參開tomcat官方文檔,注意,如果http server和diamond server安裝在一台機器上,請修改http server的端口,避免沖突。
修改完端口后,請將diamond-utils工程下的com.taobao.diamond.common.Constants類中的DEFAULT_PORT常量修改成對應的端口號。
安裝完成后,請在tomcat的webapps下建立文件夾diamond-server和pushit-server,diamond-server中再建立diamond文件,文件內容是diamond-server的地址列表,一行一個地址,地址為ip;pushit-server中也建立diamond文件,文件內容是pushit-server的地址列表,一行一個地址,地址為ip:port(pushit后文會進行敘述)
(5)pushit
pushit是一個輕量級的消息通知服務組件,用來為diamond做實時通知服務,通知客戶端數據的變化,它也是CS的結構,服務端搭建步驟如下:
在pushit源代碼根目錄下,執行mvn clean package assembly:assembly -Dmaven.test.skip命令,成功后會在pushit/target目錄中看到pushit-pushit.tar.gz包。
執行tar -xzvf pushit-pushit.tar.gz,進行解壓。
進入pushit目錄,建立logs目錄,在logs目錄中建立pushit.log文件。
進入pushit/bin目錄,執行./pushit-startup.sh ../conf/server.properties命令,啟動pushit-server
(6)redis
redis用來存放一些跟統計相關的信息。
redis的安裝請參考redis的官方文檔。
安裝完成后,請在diamond-server的配置文件redis.properties中填寫對應的信息。
完成以上6步后,server端的搭建就完成了。
2、發布數據
diamond發布數據通過手工的方式進行。
修改diamond-server的配置文件user.properties,以k=v的方式添加登錄diamond-server的用戶名和密碼。
在瀏覽器中輸入http://ip:port/diamond-server/,ip和port為server搭建的第(2)步中的地址和端口,登錄后進入后台管理界面,然后點擊“配置信息管理”—— “添加配置信息”,在輸入框中輸入dataId、group、內容,最后點擊“提交”即可。
成功后,可以在“配置信息管理”中查詢到發布的數據。
3、訂閱數據
diamond客戶端API主要提供了訂閱數據的功能.
(1)客戶端獲取服務端地址
獲取服務端地址對客戶端是透明的,客戶端僅僅需要在本地進行如下域名綁定即可:
domain ip
其中,domain的值與diamond-utils工程下的com.taobao.diamond.common.Constants類中的DEFAULT_DOMAINNAME和DAILY_DOMAINNAME的值相同,ip為server搭建第(4)步中的http server地址。
(2)創建訂閱者
DiamondManager manager = new DefaultDiamondManager(group, dataId, new ManagerListener() {
public void receiveConfigInfo(String configInfo) {
// 客戶端處理數據的邏輯
}
});
參數的說明:
group和dataId為String類型,二者結合為diamond-server端保存數據的惟一key
ManagerListener 是客戶端注冊的數據監聽器, 它的作用是在運行中接受變化的配置數據,然后回調receiveConfigInfo()方法,執行客戶端處理數據的邏輯。如果要在運行中對變化的配置數據進行處理,就一定要注冊ManagerListener
(3)獲取配置數據
String configInfo = manager.getAvailableConfigInfomation(timeout);
diamond-server端保存的配置全都為文本類型,返回給客戶端的配置數據為java.lang.String類型,timeout為從網絡獲取配置數據的超時時間。客戶端調用每次調用該方法,都能夠保證獲取一份最新的可用的配置數據。