以下是转载自网上资料,但是根据步骤可以搭建出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为从网络获取配置数据的超时时间。客户端调用每次调用该方法,都能够保证获取一份最新的可用的配置数据。

 
 
 
好文要顶 关注我 

淘宝JAVA中间件Diamond的更多相关文章

  1. 淘宝JAVA中间件Diamond详解(2)-原理介绍

    淘宝JAVA中间件Diamond详解(二)---原理介绍 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本次为大家带来的是diamond核心原理的介绍,主要包括server ...

  2. 淘宝JAVA中间件Diamond详解之简介&快速使用 管理持久配置的系统

    http://my.oschina.net/u/435621/blog/270483?p=1 淘宝JAVA中间件Diamond详解(一)---简介&快速使用 大家好,今天开始为大家带来我们通用 ...

  3. 淘宝JAVA中间件Diamond详解(一)---简介&快速使用

    大家好,今天开始为大家带来我们通用产品团队的产品 —— diamond的专题,本次为大家介绍diamond的概况和快速使用. 一.概况 diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是 ...

  4. 淘宝JAVA中间件Diamond详解(二)---原理介绍

    转:http://blog.csdn.net/anhuidelinger/article/details/70314744 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本 ...

  5. Java中间件:淘宝网系统高性能利器(转)

    淘宝网是亚太最大的网络零售商圈,其知名度毋庸置疑,吸引着越来越多的消费者从街头移步这里,成为其忠实粉丝.如此多的用户和交易量,也意味着海量的信息处理,其背后的IT架构的稳定性.可靠性也显得尤为重要.那 ...

  6. Java中间件:淘宝网系统高性能利器

    [TechTarget中国原创]淘宝网是亚太最大的网络零售商圈,其知名度毋庸置疑,吸引着越来越多的消费者从街头移步这里,成为其忠实粉丝.如此多的用户和交易量,也意味着海量的信息处理,其背后的IT架构的 ...

  7. 大型网站系统与Java中间件实践

    大型网站系统与Java中间件实践(贯通分布式高并发高数据高访问量网站架构与实现之权威著作,九大一线互联网公司CTO联合推荐) 曾宪杰 著   ISBN 978-7-121-22761-5 2014年4 ...

  8. 淘宝分布式配置管理服务Diamond

    转载:http://blog.csdn.net/kevinlynx/article/details/40017109 在一个分布式环境中,同类型的服务往往会部署很多实例.这些实例使用了一些配置,为了更 ...

  9. diamond淘宝框架使用

    转载:http://blog.csdn.net/coolyqq/article/details/50435634 一.概况 diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单.可靠. ...

随机推荐

  1. 对象存储 - Swift 原理 及 Swift+keystone+dashboard 架构搭建

    1. 原理介绍 Swift 架构.原理及功能: http://www.cnblogs.com/sammyliu/p/4955241.html 总结的很详细也很全面,受益匪浅,感谢分享. 2. keys ...

  2. pythn抓取网页小例子

    import urllib.request import re from tkinter import * win = Tk() win.geometry('500x300+400+300') t = ...

  3. pytest学习(2)

    可以把多个test放在一个class里, class TestClass(object): def test_one(self): x = "this" assert 'h' in ...

  4. hdu 5176(并查集)

    The Experience of Love Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  5. Centos7Yum安装PHP7.2

    1.安装源 安装php72w,是需要配置额外的yum源地址的,否则会报错不能找到相关软件包. php高版本的yum源地址,有两部分,其中一部分是epel-release,另外一部分来自webtatic ...

  6. 【cocos2d-js官方文档】二、资源管理器Assets Manager

    这篇文档将介绍Cocos2d-JS 3.0的一个重量级新特性:资源管理器(仅支持JSB).资源管理器是为游戏运行时的资源热更新而设计的,这里的资源可以是图片,音频甚至游戏脚本本身.使用资源管理器,你将 ...

  7. POJ 2018 Best Cow Fences

    斜率优化. 设$s[i]$表示前缀和,$avg(i,j)=(s[j]-s[i-1])/(j-(i-1))$.就是$(j,s[j])$与$(i-1,s[i-1])$两点之间的斜率. 如果,我们目前在计算 ...

  8. ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven(第k短路模板)

    求第k短路模板 先逆向求每个点到终点的距离,再用dij算法,不会超时(虽然还没搞明白为啥... #include<iostream> #include<cstdio> #inc ...

  9. 差分+树状数组 线段树【P2357】 守墓人

    题目描述-->p2357 守墓人 敲了一遍线段树,水过. 树状数组分析 主要思路: 差分 简单介绍一下差分(详细概念太麻烦,看下面. 给定一个数组 7 8 6 5 1 8 18 20 35 // ...

  10. 找礼物(find)(模拟)

    找礼物(find) 时间限制: 1 Sec  内存限制: 64 MB提交: 57  解决: 4[提交][状态][讨论版] 题目描述 新 年到了,你的好友和你(共K个人)的周围满是礼物,你让你的好友先拿 ...