disconf使用小结

目前我们公司用的分布式配置中心是disconf,对于普通的spring项目集成还是比较方便,主要功能点分布式配置还有配置的动态更新通知

安装disconf服务端

参考地址https://disconf.readthedocs.io/zh_CN/latest/install/index.html

本人自我实践,踩了一些坑

  1. 新建文件夹

    本人使用的是mac,新建目录/data/disconf,并执行以下命令mkdir -p /data/disconf/online-resources /data/disconf/tomcat /data/disconf/war /data/disconf/source

  2. 克隆disconf源码

    github地址https://github.com/knightliao/disconf,比如到切换到你自己的目录/data/disconf/source,然后执行命令git clone https://github.com/knightliao/disconf

  3. 复制配置文件

    复制源码的disconf-web/profile/rd下面的配置文件到/data/disconf/online-resources下面,并修改application-demo.properties为application.properties,其余配置文件按照自己的服务进行配置,包括mysql,redis(里面有2个配置如果只有1个redis服务写成一样即可)和zk

  4. 打包部署

    切换到源码disconf-web目录下面,修改deploy/deploy.sh,增加环境变量

    1. export ONLINE_CONFIG_PATH=/data/disconf/online-resources
    2. export WAR_ROOT_PATH=/data/disconf/war

    执行命令sh deploy/deploy.sh,完成后会在/data/disconf/war目录下生成文件

  5. 配置tomcat

    解压一个tomcat到/data/disconf/tomcat目录下,修改配置文件server.xml端口改为8015,然后在Host标签下新增配置

    1. <Context path="" docBase="/data/disconf/war"></Context>
  6. 初始化db数据

    创建disconf数据库,可以参考 源码disconf-web/sql/readme.md 来进行数据库的初始化。注意顺序执行

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

      后面清楚测试数据,只要保留role,role_resource,user表数据即可,env表需要自己配置各个环境比如dev,test,pre,prod
  7. 配置nginx

    1. upstream disconf {
    2. server 127.0.0.1:8015;
    3. }
    4. server {
    5. listen 80;
    6. server_name disconf.com;
    7. access_log /data/disconf/access.log;
    8. error_log /data/disconf/error.log;
    9. location / {
    10. root /data/disconf/war/html;
    11. if ($query_string) {
    12. expires max;
    13. }
    14. }
    15. location ~ ^/(api|export) {
    16. proxy_pass_header Server;
    17. proxy_set_header Host $http_host;
    18. proxy_redirect off;
    19. proxy_set_header X-Real-IP $remote_addr;
    20. proxy_set_header X-Scheme $scheme;
    21. proxy_pass http://disconf;
    22. }
    23. }
  8. 配置本机host

    127.0.0.1 disconf.com

  9. 各个服务启动

    • mysql
    • redis
    • zookeeper
    • tomcat
    • nginx
  10. 访问disconf服务端

    http://disconf.com/,可以使用默认用户admin/admin登录,首先新建一个app叫smc,然后在新建一个配置文件叫info.properties,版本为1.0.0,环境选择dev,应用选择smc,输入配置名info.properties,文本为phone=18888888888,再新建一个配置项,名称为name,值为name。

客户端使用

新建一个maven工程,添加依赖

  1. <dependency>
  2. <groupId>com.baidu.disconf</groupId>
  3. <artifactId>disconf-client</artifactId>
  4. <version>2.6.36</version>
  5. </dependency>

在src/main/resources下面新建applicationContext.xml配置文件内容为

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  7. <aop:aspectj-autoproxy/>
  8. <!-- 使用disconf必须添加以下配置 -->
  9. <bean id="disconfMgrBean" class="com.baidu.disconf.client.DisconfMgrBean"
  10. destroy-method="destroy">
  11. <property name="scanPackage" value="com.yaojiafeng.test.disconf"/>
  12. </bean>
  13. <bean id="disconfMgrBean2" class="com.baidu.disconf.client.DisconfMgrBeanSecond"
  14. init-method="init" destroy-method="destroy">
  15. </bean>
  16. <context:component-scan base-package="disconf"/>
  17. </beans>

新建启动类Application.java

  1. public class Application {
  2. public static void main(String[] args) {
  3. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
  4. while (true) {
  5. Info info = (Info) context.getBean("info");
  6. System.out.println(info.getPhone());
  7. Name name = (Name) context.getBean("name");
  8. System.out.println(unicodeToCn(name.getName()));
  9. try {
  10. Thread.sleep(1000);
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }
  16. private static String unicodeToCn(String unicode) {
  17. /** 以 \ u 分割,因为java注释也能识别unicode,因此中间加了一个空格*/
  18. String[] strs = unicode.split("\\\\u");
  19. String returnStr = "";
  20. // 由于unicode字符串以 \ u 开头,因此分割出的第一个字符是""。
  21. for (int i = 1; i < strs.length; i++) {
  22. returnStr += (char) Integer.valueOf(strs[i], 16).intValue();
  23. }
  24. return returnStr;
  25. }
  26. }

新建2个配置类Info和Name

  1. package disconf;
  2. import com.baidu.disconf.client.common.annotations.DisconfFile;
  3. import com.baidu.disconf.client.common.annotations.DisconfFileItem;
  4. import com.baidu.disconf.client.common.annotations.DisconfUpdateService;
  5. import org.springframework.stereotype.Service;
  6. @Service
  7. @DisconfFile(filename = "info.properties")
  8. @DisconfUpdateService(classes = {Info.class}, itemKeys = {"name"})
  9. public class Info {
  10. private String phone;
  11. @DisconfFileItem(name = "phone", associateField = "phone")
  12. public String getPhone() {
  13. return phone;
  14. }
  15. public void setPhone(String phone) {
  16. this.phone = phone;
  17. }
  18. }
  19. package disconf;
  20. import com.baidu.disconf.client.common.annotations.DisconfItem;
  21. import org.springframework.stereotype.Service;
  22. @Service
  23. public class Name {
  24. private String name;
  25. @DisconfItem(key = "name", associateField = "name")
  26. public String getName() {
  27. return name;
  28. }
  29. public void setName(String name) {
  30. this.name = name;
  31. }
  32. }

最后在src/main/resources里新建disconf.properties配置文件内容

  1. # 是否使用远程配置文件
  2. # true(默认)会从远程获取配置 false则直接获取本地配置
  3. enable.remote.conf=true
  4. #
  5. # 配置服务器的 HOST,用逗号分隔 127.0.0.1:8000,127.0.0.1:8000
  6. #
  7. conf_server_host=disconf.com
  8. # 版本, 请采用 X_X_X_X 格式
  9. version=1.0.0
  10. # APP 请采用 产品线_服务名 格式
  11. app=smc
  12. # 环境
  13. env=dev
  14. # debug
  15. debug=true
  16. # 忽略哪些分布式配置,用逗号分隔
  17. ignore=
  18. # 获取远程配置 重试次数,默认是3次
  19. conf_server_url_retry_times=1
  20. # 获取远程配置 重试时休眠时间,默认是5秒
  21. conf_server_url_retry_sleep_seconds=1

然后运行Application的main方法,即可打印出disconf拉取到的信息,并且尝试在disconf服务端改配置,客户端也立即能获取到最新的配置。

disconf使用小结的更多相关文章

  1. disconf原理 “入坑”指南

    之前有了解过disconf,也知道它是基于zookeeper来做的,但是对于其运行原理不太了解,趁着周末,debug下源码,也算是不枉费周末大好时光哈 :) .关于这篇文章,笔者主要是参考discon ...

  2. disconf原理解析

    前有了解过disconf,也知道它是基于zookeeper来做的,特意写了文章记录下自己的见解.如有错误,欢迎指正. 1.disconf-web会在启动时,将自身的host和配置文件注册到zookee ...

  3. 从零开始编写自己的C#框架(26)——小结

    一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...

  4. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  5. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  6. iOS--->微信支付小结

    iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...

  7. iOS 之UITextFiled/UITextView小结

    一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...

  8. K近邻法(KNN)原理小结

    K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...

  9. scikit-learn随机森林调参小结

    在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...

随机推荐

  1. 重装了Devexpress后项目报Dll引用找不到问题解决办法

    最近将我的开发环境从VS2015升级到VS2017,升级完后报如下错误,找不到Dev的引用,明明是重新装了dev为什么找不到呢? 经过查看dll引用地址,发现我的dev一开始是安装在C盘,dll引用路 ...

  2. 关于IsDeleted,Islock,State类型Bit,char(1),tinyint的探讨

    做IsDeleted,Islock,State时,字段的数据类型选择一般有三种Bit,char,tinyint,大于2个字节的类型我们暂时不考虑,这里以mssql为例. 数据大小​: Bit,char ...

  3. WebApi系列(从.Net FrameWork 到 .Net Core)

    一. 简介  1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器.APP等)来构建Http服务的一个 ...

  4. elasticsearch 6.2.4添加用户密码认证

    elasticsearch 6.3版本之前的添加认证需安装x-pack插件,6.3之后貌似去掉了这个. 1.安装x-pack 先切换到elastic用户下,在执行以下命令 $cd /data/elas ...

  5. Oracle DB Day03(SQL)

    --day03 --创建一个包含下面信息的表,并添加一些记录待用 --EMPLOYEE_ID NOT NULL NUMBER(6) --FIRST_NAME VARCHAR2(20) --LAST_N ...

  6. 五十九、linux 编程—— I/O 多路复用 fcntl

    59.1 介绍 前面介绍的函数如,recv.send.read 和 write 等函数都是阻塞性函数,若资源没有准备好,则调用该函数的进程将进入阻塞状态.我们可以使用 I/O 多路复用来解决此问题(即 ...

  7. Eclipse——手把手教新手安装Eclipse

    一.准备工作:安装JRE和JDK. 全名分别为:Java Runtime Environmen和Java SE Development Kit,推荐直接在某度软件中心下载即可,注意区分64位和32位. ...

  8. (四)Python中的“四大才子”(字符串、列表、字典、集合)

    前戏:在python中把数据序列分为可变(mutable)和不可变(immutable)两种 不可变:string.int.float.tuple 特点:相同对象只是占用一个内存地址,不管有多少个变量 ...

  9. Arch Linux 记录

    2017.1.8 开始花了两天装 Arch Linux,因为是第一次安装 Arch Linux,所以过程中遇到许多问题,特记录如下. 安装过程及遇到的问题: 下载镜像,刻盘. 重启进入 LiveCD ...

  10. javaFX的控制台实现

    最近做了个javaFX的工具,想弄个控制台输出信息,准备用TextArea来模拟console,但直接操纵console对象的话不依赖这个项目的地方就无法输出信息到控制台了,至于log,以前弄过一个输 ...