[文檔] TDDL和Diamond的使用(二):Diamond

  一, Diamond編譯

  Diamond的代碼庫地址爲: http://code.taobao.org/svn/diamond/trunk; 當前版本是r20,可是與TDDL匹配的版本是r16,所以咱們在check時須要指定這個版本。

  1) 獲取代碼:svn co  http://code.taobao.org/svn/diamond/trunk  -r r16

  獲取的代碼中,有 diamond-client, diamond-server和diamond-utils三個目錄

  2) 配置說明:

  在trunk和子目錄下都有pom.xml文件,是maven編譯的設置;

  在trunk/diamond-server/src/main/resources下幾個properties文件。其中jdbc.properties是數據庫配置,須要根據實際的數據庫參數先進行設置(也能夠在部署後修改);user.properties是登陸diamond server後臺所需的用戶名密碼;node.properties和system.properties是系統的配置。

  3) 配置修改

  a) pom.xml:刪除antx.properties段的配置

  b) propertie諸文件能夠先不修改

  4) 編譯代碼

  編譯依賴於java和maven,須要預裝這兩個環境。

  環境準備好後,在trunk根目錄下使用以下命令編譯:

   mvn clean package -Dmaven.test.skip

  編譯成功會生成若干個jar包和一個war包,其中diamond-server/target下的war包則是用來部署的server文件

  [INFO] taobao diamond v2.0.5.3.taocode-SNAPSHOT ………….. SUCCESS [3.331s]

  [INFO] diamond-utils v2.0.5.3.taocode-SNAPSHOT …………… SUCCESS [2.860s]

  [INFO] diamond-client v2.0.5.3.taocode-SNAPSHOT ………….. SUCCESS [2.269s]

  [INFO] diamond-server v2.0.5.3.taocode-SNAPSHOT ………….. SUCCESS [4.642s]

   二,示例

  編譯成功後,下面進行簡單的試用。

  1) 下載tomcat 7並部署,使用默認端口8080(該端口已是diamond-utils中設置的默認訪問端口);

  2) 安裝mysql數據庫,根據默認的trunk/diamond-server/src/main/resources/jdbc.properties執行以下數據庫語句;html

CREATE DATABASE diamond;
GRANT ALL ON diamond.* TO zh@'%'  IDENTIFIED BY 'abc';
USE diamond;
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 ' ',
  `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`)
)  CHARSET=GBK

上表中代碼建立了diamond數據庫及config_info表,並賦予了zh/abc用戶權限。
  3) 部署Diamond-server:將編譯好的diamond-server.war投放到tomcat的webapp目錄下,啓動tomcat,而後訪問http://[IP]:8080/diamond-server/ 能夠進入diamond管理頁面,訪問的用戶名和密碼爲webapps/diamond-server/WEB-INF/classes/user.properties中設置的用戶名密碼,若是出現問題,能夠查看webapps/diamond-server/WEB-INF/logs下的日誌查找緣由。

  成功進入後的UI如圖所示:

  其中配置信息管理用於增刪改查配置信息;分組管理會出錯(在r16版本中缺乏相應的邏輯處理);權限管理用於修改登陸用戶。

  咱們在配置信息管理中增長一條測試信息:

  dataId和Group如圖所示,content隨便寫

  4) 部署http server。http server給用戶用來查找diamond-server,客戶端默認訪問網址 http://a.b.c:8080/diamond-server/url  來獲取數據。通常來說,http server和diamond server是部署在不一樣機器上的,這裏簡單起見,將兩者部署在同一個機器下的同一個tomcat的同一個應用中,注意,若是部署在不一樣的tomcat中,端口號必定是8080,不能修改(因此必須部署在不一樣的機器上)。

  在步驟3中的diamond-server下創建url文件,並寫入diamond-server的IP地址:一行一個,如127.0.0.1

  能夠嘗試訪問  http://a.b.c:8080/diamond-server/url  測試地址是否生效。

  5) 客戶端測試

  在客戶端測試機上配置域名: a.b.c指向http server所在地址;而後編寫代碼進行數據獲取:
  1. public class DClientTest {
  2.   public static void main(String[] args) {
  3.     // group和dataId爲String類型,兩者結合爲diamond-server端保存數據的唯一key
  4.     String group = "DEFAULT_GROUP";
  5.     String dataId = "test";

  6.     // ManagerListener 是客戶端註冊的數據監聽器,能在運行中接受變化的配置數據,
  7.     // 而後回調receiveConfigInfo()方法,執行客戶端處理數據的邏輯。
  8.     // 若是要在運行中對變化的配置數據進行處理,就必定要註冊ManagerListener
  9.     DiamondManager manager = new DefaultDiamondManager(group, dataId,
  10.         new ManagerListener() {
  11.           @Override
  12.           public Executor getExecutor() {
  13.             return null;
  14.           }
  15.           @Override
  16.           public void receiveConfigInfo(String configInfo) {
  17.             System.out.println("獲取配置信息:" + configInfo);
  18.           }
  19.         });
  20.     // 通常的獲取信息方法
  21.     String configInfo = manager.getAvailableConfigureInfomation(1000);
  22.     System.out.println(configInfo);
  23.   }
  24. }
複製代碼

  執行程序則會獲取並輸出數據,若是在diamond-server中修改了測試數據,這段代碼會自動從新獲取新的數據。

  編譯執行時須要導入:diamond-util*.jar,diamond-utils*.jar,commons-net*.jar,commons-httpclient*.jar等包。若是使用mvn編譯,在本地倉庫中這些包都能找到。

   擴展閱讀:

  TDDL和Diamond的使用(一):基本介紹: http://udn.yyuap.com/thread-38155-1-1.html

  TDDL和Diamond的使用(二):Diamond: http://udn.yyuap.com/thread-38157-1-1.html

  TDDL和Diamond的使用(三):TDDL: http://udn.yyuap.com/thread-38159-1-1.html