淘寶JAVA中間件Diamond

如下是轉載自網上資料,可是根據步驟能夠搭建出diamond配置中心服務器。java

項目中須要用到diamond的理由是, 項目中使用了不少定時任務和異步任務。並且這些定時任務和異步任務都是分佈式的安排在多個服務器上運行的。 有時候其中一臺服務器任務過重會致使效率低甚至一些問題,所以這些任務的配置會常常的改動。配置的改動就會須要從新部署工程項目。 mysql

Diamond就能很好的解決這個問題, 把配置文件部署到另一個單獨的服務器上(diamond-server配置中心),而後工程項目去監聽這個配置,發現配置有改動,就從新加載配置部分。至關於把定時任務和異步任務的模塊從新啓動,其餘部分仍是繼續在運行的。web

好比: 建立一個java類,繼承InitializingBean接口,重寫afterPropertiesSet方法, 表示在這個java bean初始化的時候,必定會調用到afterPropertiesSet。在這個方法中,添加對配置中心的監聽redis

@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詳解---簡介&快速使用sql

你們好,今天開始爲你們帶來咱們通用產品團隊的產品 —— diamond的專題,本次爲你們介紹diamond的概況和快速使用。數據庫

1、概況瀏覽器

diamond是淘寶內部使用的一個管理持久配置的系統,它的特色是簡單、可靠、易用,目前淘寶內部絕大多數系統的配置,由diamond來進行統一管理。tomcat

diamond爲應用系統提供了獲取配置的服務,應用不只能夠在啓動時從diamond獲取相關的配置,並且能夠在運行中對配置數據的變化進行感知並獲取變化後的配置數據。服務器

持久配置是指配置數據會持久化到磁盤和數據庫中。網絡

diamond的特色是簡單、可靠、易用:

簡單:總體結構很是簡單,從而減小了出錯的可能性。

可靠:應用方在任何狀況下均可以啓動,在承載淘寶核心系統並正常運行一年多以來,沒有出現過任何重大故障。

易用:客戶端使用只須要兩行代碼,暴露的接口都很是簡單,易於理解。

2、快速使用

一、源代碼檢出

從如下svn地址檢出diamond的源代碼:

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

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

二、發佈數據

diamond發佈數據經過手工的方式進行。

修改diamond-server的配置文件user.properties,以k=v的方式添加登陸diamond-server的用戶名和密碼。

在瀏覽器中輸入http://ip:port/diamond-server/,ip和port爲server搭建的第(2)步中的地址和端口,登陸後進入後臺管理界面,而後點擊「配置信息管理」—— 「添加配置信息」,在輸入框中輸入dataId、group、內容,最後點擊「提交」便可。

成功後,能夠在「配置信息管理」中查詢到發佈的數據。

三、訂閱數據

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

相關文章
相關標籤/搜索