Disconf使用说明

目录(?)

Distributed Configuration Management Platform(分布式配置管理平台)

专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务。

包括 百度滴滴打车银联网易拉勾网 等知名互联网公司正在使用!


主要目标:

  • 部署极其简单:同一个上线包,无须改动配置,即可在 多个环境中(RD/QA/PRODUCTION) 上线
  • 部署动态化:更改配置,无需重新打包或重启,即可 实时生效
  • 统一管理:提供web平台,统一管理 多个环境(RD/QA/PRODUCTION)、多个产品 的所有配置
  • 支持微服务架构

demos

https://github.com/knightliao/disconf-demos-java

disconf的模块架构

每个模块的简单介绍如下:

  • Disconf-core
    • 分布式通知模块:支持配置更新的实时化通知
    • 路径管理模块:统一管理内部配置路径URL
  • Disconf-client
    • 配置仓库容器模块:统一管理用户实例中本地配置文件和配置项的内存数据存储
    • 配置reload模块:监控本地配置文件的变动,并自动reload到指定bean
    • 扫描模块:支持扫描所有disconf注解的类和域
    • 下载模块:restful风格的下载配置文件和配置项
    • watch模块:监控远程配置文件和配置项的变化
    • 主备分配模块:主备竞争结束后,统一管理主备分配与主备监控控制
    • 主备竞争模块:支持分布式环境下的主备竞争
  • Disconf-web
    • 配置存储模块:管理所有配置的存储和读取
    • 配置管理模块:支持配置的上传、下载、更新
    • 通知模块:当配置更新后,实时通知使用这些配置的所有实例
    • 配置自检监控模块:自动定时校验实例本地配置与中心配置是否一致
    • 权限控制:web的简单权限控制
  • Disconf-tools
    • context共享模块:提供多实例间context的共享。

使用说明

1.导入jar包

[html]  view plain  copy
  1. <dependency>  
  2.     <groupId>com.baidu.disconf</groupId>  
  3.     <artifactId>disconf-client</artifactId>  
  4.     <version> 2.6.30</version>  
  5. </dependency>  

2.在客户端应用的classpath下新增disconf.properties文件

注:所有disconf.properties配置文件中的参数,所有配置均可以通过 命令行 -Dname=value 参数传入。启动参数方式进行覆盖


Disconf启动需要此文件,文件示例是:

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

#
# 配置服务器的 HOST,用逗号分隔  127.0.0.1:8000,127.0.0.1:8000
#
conf_server_host=127.0.0.1:8080

# 版本, 请采用 X_X_X_X 格式 
version=1_0_0_0

# APP 请采用 产品线_服务名 格式 
app=disconf_demo

# 环境
env=rd

# debug
debug=true

# 忽略哪些分布式配置,用逗号分隔
ignore=

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


配置相关说明可参考:

配置项说明是否必填默认值
disconf.conf_server_host配置服务器的 HOST,用逗号分隔 ,示例:127.0.0.1:8000,127.0.0.1:8000必填
disconf.appAPP 请采用 产品线_服务名 格式优先读取命令行参数,然后再读取此文件的值
disconf.version版本号, 请采用 X_X_X_X 格式默认为 DEFAULT_VERSION。优先读取命令行参数,然后再读取此文件的值,最后才读取默认值。
disconf.enable.remote.conf是否使用远程配置文件,true(默认)会从远程获取配置, false则直接获取本地配置false
disconf.env环境默认为 DEFAULT_ENV。优先读取命令行参数,然后再读取此文件的值,最后才读取默认值
disconf.ignore忽略的分布式配置,用空格分隔
disconf.debug调试模式。调试模式下,ZK超时或断开连接后不会重新连接(常用于client单步debug)。非调试模式下,ZK超时或断开连接会自动重新连接。false
disconf.conf_server_url_retry_times获取远程配置 重试次数,默认是3次3
disconf.conf_server_url_retry_sleep_seconds获取远程配置 重试时休眠时间,默认是5秒5
disconf.user_define_download_dir用户定义的下载文件夹, 远程文件下载后会放在这里。注意,此文件夹必须有有权限,否则无法下载到这里./disconf/download
disconf.enable_local_download_dir_in_class_path下载的文件会被迁移到classpath根路径下,强烈建议将此选项置为 true(默认是true)true


详细设计请参考:

http://disconf.readthedocs.io/zh_CN/latest/design/index.html


applicationContext.xml添加Disconf启动支持

scanPackage是扫描标注了disconf注解类所在包路径


4 配置项注解使用

配置项即K-V的形式,使用如下:

在类的get方法上添加注解 @DisconfFileItem 。添加标记 name, 表示配置文件中的KEY名,这是必填的。标记associateField是可选的,它表示此get方法相关连的域的名字,如果此标记未填,则系统会自动 分析get方法,猜测其相对应于域名。强烈建议添加associateField标记,这样就可以避免Eclipse生成的Get/Set方法不符合 Java规范的问题。


实例,请参考   5 配置文件注解使用

5 配置文件注解使用


具体步骤是:

  1. 为这个类定义 @DisconfFile 注解,指定文件名为 code.properties 。
  2. 定义域codeError,并使用Eclipse为其自动生成 get&set 方法。
  3. 为该域的get方法上添加注解 @DisconfFileItem 。添加标记 name, 表示配置文件中的KEY名,这是必填的。标记associateField是可选的,它表示此get方法相关连的域的名字,如果此标记未填,则系统会自动 分析get方法,猜测其相对应于域名。强烈建议添加associateField标记,这样就可以避免Eclipse生成的Get/Set方法不符合 Java规范的问题。
  4. 标记它为Spring托管的类 (使用@Service),且 "scope" 都必须是singleton的。

注意:

Eclipse自动生成的get方法,可能与Java的规范不同。这会导致很多问题。因此,建议加上 associateField 标记。

在disconf-web上code.properties新增该配置文件(版本,环境,app与disconf.properties配置文件中相同)

配置更新回调

实现IDisconfUpdate接口,并且该类是由spring管理

注解@DisconfUpdateService, confFileKeys为监控配置文件更新,itemKeys为监控配置项更新

7 文件托管

配置文件没有相应的配置注解类,此配置文件不会被注入到配置类中。disconf只是简单的对其进行托管 启动时下载配置文件;配置文件变化时,负责动态推送。程序不会自动reload配置,需要自己写回调函数(实现IDisconfUpdate接口,并添加DisconfUpdateService注解)

[html]  view plain  copy
  1. <!-- 使用托管方式的disconf配置(无代码侵入, 配置更改不会自动reload)-->  
  2. <bean id="configproperties_no_reloadable_disconf"  
  3.       class="com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean">  
  4.     <property name="locations">  
  5.         <list>  
  6.             <value>myserver.properties</value>  
  7.         </list>  
  8.     </property>  
  9. </bean>  
  10.   
  11. <bean id="propertyConfigurerForProject1"  
  12.       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  13.     <property name="ignoreResourceNotFound" value="true"/>  
  14.     <property name="ignoreUnresolvablePlaceholders" value="true"/>  
  15.     <property name="propertiesArray">  
  16.         <list>  
  17.             <ref bean="configproperties_no_reloadable_disconf"/>  
  18.         </list>  
  19.     </property>  
  20. </bean>  

8 管理端disconf-web

8.1.环境配置

配置java、maven环境,并安装MySQL,reids,zookeeeper,Nginx

8.2.下载disconf

下载https://codeload.github.com/knightliao/disconf/zip/master
解压:unzip disconf-master.zip

8.3.编译打包

创建目录

[python]  view plain  copy
  1. mkdir /home/disconf/online-resources    
  2. mkdir /home/disconf/war    
  3. cd disconf-master    
  4. mvn clean install    
  5. ONLINE_CONFIG_PATH=/home/disconf/online-resources    
  6. WAR_ROOT_PATH=/home/disconf/war    
  7. export ONLINE_CONFIG_PATH    
  8. export WAR_ROOT_PATH    
  9. cd disconf-web    
  10. sh deploy/deploy.sh    


完成在/home/disconf/war目录下产生文件
[python]  view plain  copy
  1. -disconf-web.war      
  2. -html      
  3. -jpaas_control    
  4. -META-INF      
  5. -Release    
  6. -tmp    
  7. -WEB-INF    


8.4.修改配置

1)将配置文件放到此地址目录下:/home/disconf/online-resources
配置文件包括:
- jdbc-MySQL.properties (数据库配置)
Redis-config.properties (Redis配置)
- zoo.properties (Zookeeper配置)
- application.properties (应用配置)
注意,记得执行将application-demo.properties复制成application.properties:
cp application-demo.properties application.properties 

2)修改disconf配置
cd /home/disconf/war/WEB-INF/classes/
application.properties
jdbc-mysql.properties
redis-config.properties
zoo.properties
修改文件中的地址端口,调整日志目录
#log4j.properties
${catalina.home}/logs/disconf-log4j.log
#logback.xml
<property name="log.base" value="${catalina.home}/logs/disconf-web"/>
<property name="log.monitor" value="${catalina.home}/logs/monitor"/>

8.5.初始化数据库

按照disconf-master/disconf-web/sql/readme.txt说明按照顺序导入数据

8.6.配置tomcat

安装tomcat配置server.xml配置war目录
<Context path="" docBase="/home/disconf/disconf/war"></Context>

8.7.配置nginx

安装nginx,并配置,安装参考:http://blog.csdn.net/zhu_tianwei/article/details/17752581
配置:vi /home/disconf/nginx/conf/nginx.conf

[python]  view plain  copy
  1. upstream disconf {    
  2.     server 127.0.0.1:8080;    
  3. }    
  4.     
  5. server {    
  6.     listen   8000;    
  7.     server_name localhost;    
  8.     access_log logs/disconf_access.log;    
  9.     error_log logs/disconf_error.log;    
  10.     
  11.     location / {    
  12.         root /home/disconf/disconf/war/html;    
  13.         if ($query_string) {    
  14.             expires max;    
  15.         }    
  16.     }    
  17.     
  18.     location ~ ^/(api|export) {    
  19.         proxy_pass_header Server;    
  20.         proxy_set_header Host $http_host;    
  21.         proxy_redirect off;    
  22.         proxy_set_header X-Real-IP $remote_addr;    
  23.         proxy_set_header X-Scheme $scheme;    
  24.         proxy_pass http://disconf;    
  25.     }    
  26. }  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值