`

淘宝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为从网络获取配置数据的超时时间。客户端调用每次调用该方法,都能够保证获取一份最新的可用的配置数据。

分享到:
评论
2 楼 khlee 2015-02-11  
博主你好:我的服务端已经搭建完毕,但是客户端调用一得不到结果,二回调没反应,请问有什么地方配置需要注意吗,或者哪里配置的有问题?
1 楼 zhangzhj85 2014-03-27  
我很奇怪这个直接用zookeeper不是很好。

相关推荐

    JAVA核心知识点整理.rar

    Java中间件,缓存JAVA核心知识点整理--》从Java基础-->Java数据结构-->框架-->Java中间件,缓存JAVA核心知识点整理--》从Java基础-->Java数据结构-->框架-->Java中间件,缓存JAVA核心知识点整理--...

    大型网站系统与JAVA中间件实践-高清-带目录

    《大型网站系统与Java中间件实践》围绕大型网站和支撑大型网站架构的 Java 中间件的实践展开介绍。从分布式系统的知识切入,让读者对分布式系统有基本的了解;然后介绍大型网站随着数据量、访问量增长而发生的架构...

    金蝶中间件:AAS-V9.0.zip

    金蝶中间件AAS-V9.0是一款由国内领先的软件公司金蝶国际开发的企业级应用服务器,它在中间件领域中扮演着至关重要的角色。中间件是计算机软件的一种,它位于操作系统与应用程序之间,提供服务和支持,使得不同系统和...

    coursespider.zip

    下载中间件--->下载器 下载器发送请求,获取响应---->下载中间件---->引擎--->爬虫中间件--->爬虫 爬虫提取url地址,组装成request对象---->爬虫中间件--->引擎--->调度器 爬虫提取数据---&...

    大型网站系统与JAVA中间件实践-高清完整版

    大型网站系统与JAVA中间件实践-高清完整版,大型网站系统与JAVA中间件实践-高清完整版。

    java资源Java-COM中间件JACOB

    java资源Java-COM中间件 JACOB提取方式是百度网盘分享地址

    大型系统的JAva中间件实践-曾宪杰,淘宝

    标题《大型系统的Java中间件实践-曾宪杰,淘宝》和描述《InfoQ大会上淘宝的Java中间件ppt。非常有用的资料。对于理解分布式系统的架构非常有用。》表明本次分享的主题是关于淘宝在InfoQ大会上的一个关于Java中间件...

    《Java中间件技术及其应用开发》-李华飚-源代码

    《Java中间件技术及其应用开发》一书由李华飚撰写,主要涵盖了Java在企业级应用中的核心中间件技术和实战方法。这本书的源代码压缩包包含了一个名为"《Java中间件技术及其应用开发》-李华飚-源代码-4914.doc"的文档...

    淘宝Java中间件之路.pdf

    尤其是在Java中间件的发展和应用上,淘宝走出了一条独到的实践之路。下面,我们将详细探讨淘宝Java中间件的发展历程、现状以及未来的发展趋势。 在淘宝没有使用Java中间件之前,其业务架构主要依赖于传统的负载均衡...

    基于java的开发源码-COM中间件 JACOB.zip

    基于java的开发源码-COM中间件 JACOB.zip 基于java的开发源码-COM中间件 JACOB.zip 基于java的开发源码-COM中间件 JACOB.zip 基于java的开发源码-COM中间件 JACOB.zip 基于java的开发源码-COM中间件 JACOB.zip 基于...

    大型网站系统与JAVA中间件实践-曾宪杰

    《大型网站系统与JAVA中间件实践-曾宪杰》是一本深入探讨大型网站技术架构与JAVA中间件应用的专业书籍。作者曾宪杰以其丰富的实战经验,详细阐述了如何构建高效、稳定、可扩展的大型网站系统,以及JAVA中间件在其中...

    rabbitmq-java-client-bin-3.3.4

    RabbitMQ Java客户端是RabbitMQ消息中间件的一个重要组成部分,它允许Java开发者方便地与RabbitMQ服务器进行交互,实现消息的发布与消费。在“rabbitmq-java-client-bin-3.3.4”这个压缩包中,包含了该版本的Java...

    大型网站系统与Java中间件开发实践 - 曾宪杰.mobi 带目录、书签、超清文字版

    大型网站系统与Java中间件开发实践 - 曾宪杰.mobi 带目录、书签、超清文字版

    《Java中间件技术及其应用开发》-李华飚-源代码-4914

    《Java中间件技术及其应用开发》是一本深入探讨Java企业级应用开发的著作,由李华飚编著。这本书的源代码包含了丰富的实例和练习,旨在帮助读者理解和掌握Java中间件的核心技术和实际运用。在4914页的源代码中,我们...

    idea插件 金蝶中间件AAS-V10-sp2

    综上所述,金蝶中间件AAS-V10-sp2 IDEA插件是一个强大的工具,它为使用IDEA的开发者提供了与金蝶中间件深度集成的环境,使得在IDEA内直接处理AAS相关的开发工作成为可能,减少了开发过程中的技术障碍,提升了开发...

    jacob-Java-COM中间件-jar.zip

    使用JACOB时,你需要在你的项目中引入`jacob.jar`文件,这是一个包含JACOB库的Java类和接口的归档文件。这个库提供了大量的Java类,如`ActiveXComponent`,`Variant`等,用于封装和操作COM对象。例如,你可以创建一...

    《JAVA中间件技术及其应用开发》课件

    《JAVA中间件技术及其应用开发》是一门深入探讨Java中间件技术及其实现方法的课程。这门课程的课件涵盖了从基础理论到实践应用的多个方面,旨在帮助学习者全面理解并掌握Java在企业级服务中的核心角色。以下是根据...

    Zabbix通过JMX方式监控java中间件

    ### Zabbix通过JMX方式监控Java中间件的关键知识点 #### 一、Zabbix与JMX监控简介 **Zabbix**是一款开源的企业级监控工具,它能够监控网络中的各种硬件资源和软件服务的状态,并且提供了丰富的功能,如自动发现、...

Global site tag (gtag.js) - Google Analytics