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

来源:互联网 发布:奶酪陷阱同款衣服淘宝 编辑:程序博客网 时间:2024/05/20 23:04

1、disconf介绍

Distributed Configuration Management Platform(分布式配置管理平台)专注于各种 分布式系统配置管理 的通用组件 / 通用平台,提供统一的配置管理服务。
这里写图片描述
主要目标:
部署极其简单:同一个上线包,无须改动配置,即可在 多个环境中(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的功能特点描述图:
这里写图片描述

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

模块架构图:
这里写图片描述

模块信息
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
这里写图片描述

下载后可以看到这个学习资料中有:
这里写图片描述

3、源码下载

找到disconf的源码的下载地址,通过源码安装:
https://github.com/knightliao/disconf
这里写图片描述

代码下载下来之后,解压后的内容如下:
这里写图片描述

注意:
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环境(这个在官方文档没有提及,但是特别要注意,这个地方是需要的)

关于上面这些软件的安装在此不做详细介绍。以下只做软件安装位置介绍:
这里写图片描述
关于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.102nginx位置:/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.101port:6379

这里写图片描述

关于maven:

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

注意配置环境变量
这里写图片描述

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]#

这里写图片描述

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]# lsapplication-demo.properties  jdbc-mysql.properties  redis-config.properties  zoo.properties[root@hadoop15 online-resources]# cp application-demo.properties application.properties [root@hadoop15 online-resources]# lsapplication-demo.properties  application.properties  jdbc-mysql.properties  redis-config.properties  zoo.properties[root@hadoop15 online-resources]#

这里写图片描述

6.3 修改参数配置

1、修改application.properties

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

这里写图片描述

2、修改jdbc-mysql.properties

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

原配置:
这里写图片描述
新配置:
这里写图片描述

3、修改redis-config.properties
原配置:
这里写图片描述
新配置:
这里写图片描述
注意:
即使只有一个redis,也应该配置两个redis client,否则将造成内部错误。

6.4 配置zoo.properties的信息

原配置:
这里写图片描述
新配置:
这里写图片描述

7 部署disconf-web

7.1 配置环境变量

这里写图片描述

#set disconf environmentexport ONLINE_CONFIG_PATH=/home/work/dsp/disconf-rd/online-resourcesexport 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]# lsdisconf-web  online-resources  war[root@hadoop15 war]# cd disconf-web/[root@hadoop15 disconf-web]# lsbin  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...

注意:上面的过程比较慢,请耐心等待。
如果执行上面的过程中出现了以下错误:
这里写图片描述
按照提示信息,修改/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

效果图如下:
这里写图片描述

7.3 初始化数据库

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

0-init_table.sql1-init_data.sql201512/20151225.sql20160701/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添加如下内容:
这里写图片描述

启动tomcat即可
这里写图片描述

部署 前端:
将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即可出现以下界面:
这里写图片描述

8 disconf-web使用介绍

8.1 名词介绍

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

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

8.2 登录

点击上图中的登录,出现以下界面:
这里写图片描述

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

8.3 主界面

这里写图片描述

关于左侧的rd,qa,local,online在官方文档中并没有介绍如何进行修改,经过摸索,可以通过修改数据库的方式进行修改,修改:
这里写图片描述

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

在界面的左上角可以选择APP(界面选择的是disconf_demo这个项目)和环境(比如rd环境或qa环境,点击rd环境后发现已经有配置文件了),选择之后,就会在中间出现上传的配置文件的列表。
选择版本后,就会显示 APP、环境、版本 三个条件下的配置列表:
这里写图片描述

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

这里写图片描述

新建APP
这里写图片描述

新建配置项
这里写图片描述

进入主界面进行查看
这里写图片描述

新建配置文件:
这里写图片描述

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

9.项目案例介绍

以disconf-standalone-demo为例进行介绍
这里写图片描述
这里写图片描述

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

这里写图片描述

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

配置文件的内容:
这里写图片描述

具体的内容是:

<!-- 使用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

这里写图片描述

# 是否使用远程配置文件,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/downloaddisconf.user_define_download_dir=./disconf/download2# 下载的文件会被迁移到classpath根路径下,强烈建议将此选项置为 true(默认是true)disconf.enable_local_download_dir_in_class_path=true

这里写图片描述
运行后效果:
这里写图片描述

原创粉丝点击