Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

时间:2021-01-10 08:52:46

1、disconf介绍

Distributed Configuration Management Platform(分布式配置管理平台)专注于各种 分布式系统配置管理 的通用组件 / 通用平台,提供统一的配置管理服务。
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行
主要目标:
部署极其简单:同一个上线包,无须改动配置,即可在 多个环境中(RD/QA/PRODUCTION) 上线。
部署动态化:更改配置,无需重新打包或重启,即可 实时生效。
统一管理:提供web平台,统一管理 多个环境(RD/QA/PRODUCTION)、多个产品 的所有配置。
核心目标:一个jar包,到处运行。
项目信息
CLIENT端:
Java:目前唯一支持语言
开放API,让开发者有自定义开发客户端的能力:

WEB管理端
Java SpringMvc实现,前后端分离 实现方式(基于Spring 4.17.RELEASE)
开放API,让开发者具有自定义定制web控制台界面的能力。

功能特点
支持配置(配置项 + 配置文件)的分布式管理。
配置发布统一化
配置发布、更新统一化:
同一个上线包 无须改动配置 即可在多个环境(RD/QA/PRODUCTION)上线
配置存储在云端系统,用户统一管理 多个环境(RD/QA/PRODUCTION)、多个平台的所有配置
配置更新自动化:用户在平台更新配置,使用该配置的系统会自动发现该情况,并应用新配置。特殊地,如果用户为此配置定义了回调函数类,则此函数类会被自动调用。
极简的使用方式(注解式编程 或 XML无代码侵入模式):我们追求的是极简的、用户编程体验良好的编程方式。目前支持两种开发模式:基于XML配置或者基于注解,即可完成复杂的配置分布式化。

注:配置项是指某个类里的某个Field字段。
Disconf的功能特点描述图:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

其它功能特点
低侵入性或无侵入性、强兼容性:
低侵入性:通过极少的注解式代码撰写,即可实现分布式配置。
无侵入性:通过XML简单配置,即可实现分布式配置。
强兼容性:为程序添加了分布式配置注解后,开启Disconf则使用分布式配置;关闭Disconf则使用本地配置;若开启Disconf后disconf-web不能正常Work,则Disconf使用本地配置。
支持配置项多个项目共享,支持批量处理项目配置。
配置监控:平台提供自校验功能(进一步提高稳定性),可以定时校验应用系统的配置是否正确。

模块架构图:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

模块信息
CLIENT: client目标是支持多语言。目前只提供了java语言客户端。
JAVA
disconf-core:分布式配置基础包模块
disconf-client:分布式配置客户端模块, 依赖disconf-core包。 用户程序使用它作为Jar包进行分布式配置编程。
disconf-tool:分布式配置工具包,依赖disconf-core包。 Disconf-tool是disconf的辅助工具类, 目前使用不多,建议不使用。
管理端:管理端:disconf-web是统一的分布式配置管理平台。disconf-web: 分布式配置平台服务模块, 依赖disconf-core包。采用SpringMvc+纯HTML方式(前后端分离架构)实现。用户使用它来进行日常的分布式配置管理。

2、若想学习Disconf,首先找到Disconf的官方地址,官网地址为:

http://disconf.readthedocs.io/zh_CN/latest/index.html
找到学习用的参考案例
https://github.com/knightliao/disconf-demos-java
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

下载后可以看到这个学习资料中有:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

3、源码下载

找到disconf的源码的下载地址,通过源码安装:
https://github.com/knightliao/disconf
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

代码下载下来之后,解压后的内容如下:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

注意:
1、当下载下来之后,不要立即看到有pom.xml就使用maven进行编译(这是java同学常见的习惯噢)。
2、经过测试,该源码在JDK6.x + maven2环境下可以编译通过,高版本的编译不通过。
3、如果我们想查看文档,可以打开源码中的README.md文件,里面有各种网址。
比如:
4、**disconf-master\README.md中列出了可供参考的 **demos && 文档 && 协作连接:

- demos: https://github.com/knightliao/disconf-demos-java
- wiki: https://github.com/knightliao/disconf/wiki
- 文档: http://disconf.readthedocs.io
- 协作开发: 在 master 分支上提pull request
- 提问题: https://github.com/knightliao/disconf/issues 提issue

5、环境准备

安装依赖软件:

安装Mysql(Ver 14.12 Distrib 5.0.45, for unknown-linux-gnu (x86_64) using EditLine wrapper,或更高版本也可以)
安装Tomcat(apache-tomcat-7.0.50,其它或更高版本也可以)
安装Nginx(nginx/1.5.3,其它版本也可以)
安装 zookeeeper (zookeeper-3.3.0,或更高版本)
安装 Redis (2.4.5,或更高版本)
配置Maven环境(这个在官方文档没有提及,但是特别要注意,这个地方是需要的)

关于上面这些软件的安装在此不做详细介绍。以下只做软件安装位置介绍:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行
关于MySQL:

ip:192.168.106.100
用户名:root
密码:123456

关于Tomcat:

机器:ip:192.168.106.105
位置:/home/tuzq/software/apache-tomcat-8.5.12 (注意在使用的时候发现tomcat的catalina.sh中的JAVA_OPTS的参数值在设置在:JAVA_OPTS='-Xms64m -Xmx128m'时仍然能够跑起来disconf-web应用)

关于Nginx

ip:192.168.106.102
nginx位置:/usr/local/nginx

关于zookeeeper

ip:192.168.106.101 + 192.168.106.102 + 192.168.106.103
部署位置:/home/tuzq/software/zookeeper
端口都是:2181

关于Redis

ip:192.168.106.101
port:6379

Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

关于maven:

ip:192.168.106.105
位置:/home/tuzq/software/apache-maven-3.3.9

注意配置环境变量
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

6、安装Disconf

6.1.创建文件夹

进入机器:192.168.106.105
执行以下命令:

[root@hadoop15 bin]# mkdir -p /home/work/dsp/disconf-rd/online-resources
[root@hadoop15 bin]# cd /home/work/dsp/disconf-rd/online-resources
[root@hadoop15 online-resources]# ls
[root@hadoop15 online-resources]# pwd
/home/work/dsp/disconf-rd/online-resources
[root@hadoop15 online-resources]#

Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

6.2 拷贝配置文件

将下载下来的disconf-master\disconf-web\profile\rd目录下的文件,拷贝到/home/work/dsp/disconf-rd/online-resources目录下
配置文件包括:

- jdbc-mysql.properties (数据库配置)
- redis-config.properties (Redis配置,主要用于web登录使用)
- zoo.properties (Zookeeper配置)
- application.properties (应用配置)

注意:记得执行以下命令,将application-demo.properties复制一份,名称为application.properties

[root@hadoop15 online-resources]# pwd
/home/work/dsp/disconf-rd/online-resources
[root@hadoop15 online-resources]# ls
application-demo.properties jdbc-mysql.properties redis-config.properties zoo.properties
[root@hadoop15 online-resources]# cp application-demo.properties application.properties
[root@hadoop15 online-resources]# ls
application-demo.properties application.properties jdbc-mysql.properties redis-config.properties zoo.properties
[root@hadoop15 online-resources]#

Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

6.3 修改参数配置

1、修改application.properties

[root@hadoop15 online-resources]# vim application.properties

Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

2、修改jdbc-mysql.properties

[root@hadoop15 online-resources]# vim jdbc-mysql.properties

原配置:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行
新配置:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

3、修改redis-config.properties
原配置:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行
新配置:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行
注意:
即使只有一个redis,也应该配置两个redis client,否则将造成内部错误。

6.4 配置zoo.properties的信息

原配置:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行
新配置:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

7 部署disconf-web

7.1 配置环境变量

Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

#set disconf environment
export ONLINE_CONFIG_PATH=/home/work/dsp/disconf-rd/online-resources
export WAR_ROOT_PATH=/home/work/dsp/disconf-rd/war

然后执行:

[root@hadoop15 online-resources]# source /etc/profile

7.2 部署disconf-web

创建文件夹:

mkdir -p /home/work/dsp/disconf-rd/war

将disconf-master\disconf-web中的内容放到/home/work/dsp/disconf-rd下,然后执行以下命令:

[root@hadoop15 war]# pwd
/home/work/dsp/disconf-rd
[root@hadoop15 disconf-rd]# ls
disconf-web online-resources war
[root@hadoop15 war]# cd disconf-web/
[root@hadoop15 disconf-web]# ls
bin deploy html pom.xml profile README.md sql src
[root@hadoop15 disconf-web]# sh deploy/deploy.sh
**********************************************
copy online config /home/work/dsp/disconf-rd/online-resources
**********************************************
Removing src/main/online-resources/*
**********************************************
It's going to Generate the output for war
**********************************************
**********************************************
It's going to got war package
**********************************************
**********************************************
use online profile
**********************************************
[INFO] Scanning for projects...

注意:上面的过程比较慢,请耐心等待。
如果执行上面的过程中出现了以下错误:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行
按照提示信息,修改/home/work/dsp/disconf-rd/war/disconf-web/pom.xml中相应的jar的版本,若发现下载很慢,请直接在CSDN的资源处下载相应的jar包。

这样会在/home/work/dsp/disconf-rd/war生成以下结果:

-disconf-web.war
-html
-META-INF
-WEB-INF

效果图如下:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

7.3 初始化数据库

可以参考disconf-web\sql\readme.md来进行数据库的初始化。注意顺序执行:

0-init_table.sql
1-init_data.sql
201512/20151225.sql
20160701/20160701.sql

注意:
里面默认有6个用户(请注意线上环境删除这些用户以避免潜在的安全问题)

Tables Are
admin admin
testUser1 MhxzKhl9209
testUser2 MhxzKhl167
testUser3 MhxzKhl783
testUser4 MhxzKhl8758
testUser5 testUser5

如果想自己设置初始化的用户名信息,可以参考代码来自己生成用户:

src/main/java/com/baidu/disconf/web/tools/UserCreateTools.java

7.4部署war

修改server.xml文件,在Host节点下设定Context:

<Context path="" docBase="/home/work/dsp/disconf-rd/war"></Context>

即在/home/tuzq/software/apache-tomcat-8.5.12/conf/server.xml添加如下内容:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

启动tomcat即可
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

部署 前端:
将disconf-web里面的disconf-master\disconf-web\html文件都放到nginx所在的/home/work/dsp/disconf-rd/war下面

mkdir -p /home/work/dsp/disconf-rd/war/html

修改nginx.conf (到192.168.106.102机器上)

upstream disconf {
server 192.168.106.105:8080;
}

server {
listen 8081;
server_name 192.168.106.102;
#access_log /home/work/var/logs/disconf/access.log;
#error_log /home/work/var/logs/disconf/error.log;

location / {
root /home/work/dsp/disconf-rd/war/html;
if ($query_string) {
expires max;
}
}

location ~ ^/(api|export) {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://disconf;
}
}

关于Host
这里的server_name必须设置成和application.properties 里的domain一样。然后浏览器的访问域名也是这个。

配置好之后,只需要需在浏览器*问:http://192.168.106.102:8081即可出现以下界面:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

8 disconf-web使用介绍

8.1 名词介绍

在disconf中有如下名词(官方文档上介绍的让人费解)

APP:使用哪个APP(可以理解成哪个项目),及它的ID,这个在配置disconf.properties时会被用到,建议使用英文。
KEY:配置文件或配置项(关于配置项这个名词容易让人费解,这里和软件工程的独立可运行的软件叫配置项不是一个概念,这里的配置项是指在disconf中配置的key,value的值。而不是通过上传项目的配置文件生成的值。若上传了项目的配置文件,这里的key和项目的配置文件的名称相同(注意这个版本的disconf不能上传文件夹形式的配置文件,并且上传配置文件的时候只能一个一个的上传))
配置内容:配置文件或配置项在配置中心中的值
实例列表:使用此配置文件或配置项的所有实例列表,及每个实例的配置值。如果实例的配置值与配置中心的值不一致,这里会标识出来。
修改时间:修改此配置的最后一次时间
操作:个性、删除、下载

8.2 登录

点击上图中的登录,出现以下界面:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

默认的用户名和密码是:admin admin

8.3 主界面

Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

关于左侧的rd,qa,local,online在官方文档中并没有介绍如何进行修改,经过摸索,可以通过修改数据库的方式进行修改,修改:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

8.4 查看不同环境的配置文件信息

在界面的左上角可以选择APP(界面选择的是disconf_demo这个项目)和环境(比如rd环境或qa环境,点击rd环境后发现已经有配置文件了),选择之后,就会在中间出现上传的配置文件的列表。
选择版本后,就会显示 APP、环境、版本 三个条件下的配置列表:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

8.5 新建APP(即项目属性),配置项(简单理解成k/v值),新建配置文件

Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

新建APP
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

新建配置项
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

进入主界面进行查看
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

新建配置文件:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

上传之后,图的显示效果如8.4中的效果。

9.项目案例介绍

以disconf-standalone-demo为例进行介绍
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

9.1配置disconf-client

若项目想用disconf,需要在pom.xml中配置disconf-client,maven依赖配置如下(最新版本为2.6.36版本):

<dependency>
<groupId>com.baidu.disconf</groupId>
<artifactId>disconf-client</artifactId>
<version>2.6.36</version>
</dependency>

9.2 配置applicationContext.xml

Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

另外要注意的是disconfMgrBean中scanPackage中的包扫描的值。

配置文件的内容:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

具体的内容是:

<!-- 使用disconf必须添加以下配置 -->
<bean id="disconfMgrBean" class="com.baidu.disconf.client.DisconfMgrBean"
destroy-method="destroy">

<property name="scanPackage" value="com.example.disconf.demo"/>
</bean>
<bean id="disconfMgrBean2" class="com.baidu.disconf.client.DisconfMgrBeanSecond"
init-method="init" destroy-method="destroy">

</bean>

<!-- 使用托管方式的disconf配置(无代码侵入, 配置更改会自动reload)-->
<bean id="configproperties_disconf"
class="com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean">

<property name="locations">
<list>
<value>classpath:/autoconfig.properties</value>
<value>classpath:/autoconfig2.properties</value>
<value>classpath:/myserver_slave.properties</value>
<value>classpath:/testJson.json</value>
<value>testXml2.xml</value>
</list>
</property>
</bean>

<bean id="propertyConfigurer"
class="com.baidu.disconf.client.addons.properties.ReloadingPropertyPlaceholderConfigurer">

<property name="ignoreResourceNotFound" value="true"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="propertiesArray">
<list>
<ref bean="configproperties_disconf"/>
</list>
</property>
</bean>

<!-- 使用托管方式的disconf配置(无代码侵入, 配置更改不会自动reload)-->
<bean id="configproperties_no_reloadable_disconf"
class="com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean">

<property name="locations">
<list>
<value>myserver.properties</value>
</list>
</property>
</bean>

<bean id="propertyConfigurerForProject1"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="ignoreResourceNotFound" value="true"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="propertiesArray">
<list>
<ref bean="configproperties_no_reloadable_disconf"/>
</list>
</property>
</bean>

9.3 配置disconf.properties

Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行

# 是否使用远程配置文件,true(默认)会从远程获取配置, false则直接获取本地配置
disconf.enable.remote.conf=true

#配置服务器的 HOST,用逗号分隔 ,示例:127.0.0.1:8000,127.0.0.1:8000,这里的值和application.propperties中的值要保持一致
disconf.conf_server_host=192.168.106.102:8081

# 版本号, 请采用 X_X_X_X 格式 默认为 DEFAULT_VERSION。优先读取命令行参数,然后再读取此文件的值,最后才读取默认值。
disconf.version=1_0_0_0

# APP 请采用 产品线_服务名 格式 优先读取命令行参数,然后再读取此文件的值
disconf.app=disconf_demo

# 环境 默认为 DEFAULT_ENV。优先读取命令行参数,然后再读取此文件的值,最后才读取默认值
disconf.env=rd

# 忽略的分布式配置,用空格分隔
disconf.ignore=

# 获取远程配置 重试次数,默认是3次
disconf.conf_server_url_retry_times=1
# 获取远程配置 重试时休眠时间,默认是5秒
disconf.conf_server_url_retry_sleep_seconds=1

# 用户定义的下载文件夹, 远程文件下载后会放在这里。注意,此文件夹必须有有权限,否则无法下载到这里 默认:./disconf/download
disconf.user_define_download_dir=./disconf/download2

# 下载的文件会被迁移到classpath根路径下,强烈建议将此选项置为 true(默认是true)
disconf.enable_local_download_dir_in_class_path=true

Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行
运行后效果:
Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,项目案例运行