特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过。如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/

一、简介

  • Diamond是淘宝研发的分布式配置管理系统。使用Diamond可以让集群中的服务进程动态感知数据的变化,无需重启服务就可以实现配置数据的更新。
  • 具有简单、可靠、易用等特点

二、使用方法

服务端搭建

1 准备工作

  • 安装jdk
  • 安装maven
  • 安装tomcat
  • 安装mysql

2 启动mysql并创建数据库和表

-- 创建Diamond数据库
CREATE DATABASE IF NOT EXISTS `diamond` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `diamond`; -- 配置表
CREATE TABLE IF NOT EXISTS `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`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- 数据导出被取消选择。 -- 组表
CREATE TABLE IF NOT EXISTS `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`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

3 下载源码

git clone https://github.com/gzllol/diamond.git

4 打包

  1. 修改diamond-server/src/main/resources/system.properties文件,将diamond.server.addr的值换成Diamond服务器所在机器的ip地址
  2. 修改diamond-server/src/main/resources/jdbc.properties文件,配置mysql服务器的url,用户名和密码
  3. 在根目录执行打包命令
mvn clean package -Dmaven.test.skip=true

5 用tomcat加载diamond-server/target/diamond-server.war

客户端使用

1 将diamond-client jar包发布到maven仓库

mvn clean deploy -Dmaven.test.skip=true

2 在工程中引入jar包

<dependency>
<groupId>com.taobao.diamond</groupId>
<artifactId>diamond-client</artifactId>
<version>2.0.5.4.taocode-SNAPSHOT</version>
</dependency>

3 使用例子

        DiamondManager manager = new DefaultDiamondManager("${your_config_data_id}", new ManagerListener() {
@Override
public Executor getExecutor() {
return null;
} @Override
public void receiveConfigInfo(String configInfo) {
System.out.println("receive config: " + configInfo);
}
});

4 在配置中心界面添加一个配置

  1. 登陆配置中心(本机是127.0.0.1:8080),用户名abc,密码123
  2. 点击左侧“配置信息管理”
  3. 点击添加配置信息
  4. 输入data_id(就是配置的id,3中的${your_config_data_id})和配置内容
  5. 点击“提交”
  6. 在更新配置时,客户端会调用ManagerListener的回调函数receiveConfigInfo,参数就是最新的配置内容

5原文地址

https://github.com/gzllol/diamond

【转】Diamond -- 分布式配置中心的更多相关文章

  1. Spring Cloud Config 分布式配置中心使用教程

    一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...

  2. 分布式配置中心 携程(apollo)

    1.传统配置文件与分布式配置文件区别 传统配置文件:如果修改了配置文件,需要重新打包发布,重新发布服务,而且每个环境的变更配置文件,比较繁琐. 分布式配置文件:将配置文件注册到配置中心上去,可以使用分 ...

  3. 分布式配置中心Apollo——QuickStart

    分布式配置中心 剥离配置文件,实现动态修改,自动更新. [假设没有分布式配置中心,修改配置文件后都需要重启服务,对于数量庞多的微服务开发来说,就会非常繁琐] 分布式配置中心有哪些 disconf(依赖 ...

  4. 【Distributed】分布式配置中心

    一.概述 1.1 什么是分布式配置中心 常用分布式配置中心框架 二.Apollo阿波罗 2.1 Apollo特点 2.2 Apollo整体架构原理 2.3 Apollo Portol 环境搭建 Lin ...

  5. Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config

    目录 Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config Spring Cloud Config(二):基于Git搭建配置中心 Spring Cl ...

  6. Spring-cloud微服务实战【九】:分布式配置中心config

      回忆一下,在前面的文章中,我们使用了spring cloud eureka/ribbon/feign/hystrix/zuul搭建了一个完整的微服务系统,不管是队内还是对外都已经比较完善了,那我们 ...

  7. 分布式配置中心Apollo

    1,什么是分布式配置中心 项目中配置文件比较繁杂,而且不同环境的不同配置修改相对频繁,每次发布都需要对应修改配置,如果配置出现错误,需要重新打包发布,时间成本较高,因此需要做统一的分布式注册中心,能做 ...

  8. SpringCloud分布式配置中心Config

    统一管理所有配置. 1.微服务下的分布式配置中心 简介:讲解什么是配置中心及使用前后的好处 什么是配置中心: 一句话:统一管理配置, 快速切换各个环境的配置 相关产品: 百度的disconf 地址:h ...

  9. spring cloud 入门系列七:基于Git存储的分布式配置中心

    我们前面接触到的spring cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config.它用来为 ...

随机推荐

  1. oa_mvc_easyui_分页(4)

    1.数据层的编写 NewListInfoDal.cs: GetPageEntityList方法,根据start,end取出数据 --row_number() over()函数查询 LoadEntity ...

  2. @RequestMapping-@PathVariable小误区

    去掉勾选就可以演示出错误了,一般勾选是为了方便我们Debug调试 会出现500错误: 正确的写法:

  3. JS基础_强制类型转换-String

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. luogu题解 P1707 【刷题比赛】矩阵加速递推

    题目链接: https://www.luogu.org/problemnew/show/P1707 分析: 洛谷的一道原创题,对于练习矩阵加速递推非常不错. 首先我们看一下递推式: \(a[k+2]= ...

  5. 微信开发新增拖动组件--movableview介绍

    小程序的更新中,也新增了一个UI组件,它就是视图组件movable-view,它需要配合movable-area来一起使用.简单来说,它就是一个支持在指定区域内可以拖动内容的容器.我们来看一个简单的示 ...

  6. 关于不同retina的布局

    不同retina,显示高度不一样,很显然最细的线条最美 <!DOCTYPE html> <html lang="en"> <head> < ...

  7. Vue 路由(对路由页面编写做规范)

    前言 上一篇写了“Vue 路由拦截(对某些页面需要登陆才能访问)” 的博客,此篇是续上篇对路由页面模块化,可以看到之前的路由配置都写在main.js中,真正开发肯定不能都写在main.js,所以我们要 ...

  8. Django框架——基础之视图系统(View.py)

    Django框架之View.py(视图文件) 1. 视图简介 视图层是Django处理请求的核心代码层,我们大多数Python代码都集中在这一层面. 它对外接收用户请求,对内调度模型层和模版层,统合数 ...

  9. List的Select 和Select().tolist()

    List<Person> delp = new List<Person> { ,Name=,Sign= }, ,Name= ,Sign=}, }; delp.Select(u ...

  10. shell条件嵌套(if条件语句)

    [注意1]:和Java.PHP等语言不一样,sh的流程控制不可为空,如: 代码如下: <?php if (isset($_GET["q"])) { search(q); } ...