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

时间:2021-05-10 04:13:34
  一, 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执行如下数据库语句;

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如图所示:
[文档] TDDL和Diamond的使用(二):Diamond
  其中配置信息管理用于增删改查配置信息;分组管理会出错(在r16版本中缺少相应的逻辑处理);权限管理用于修改登录用户。

  我们在配置信息管理中增加一条测试信息:
[文档] TDDL和Diamond的使用(二):Diamond
  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