实际项目开发-Disconf学习

1.前言

在一个分布式环境中,同类型的服务往往会部署很多实例。这些实例使用了一些配置,为了更好地维护这些配置就产生了配置管理服务。通过这个服务可以轻松地管理成千上百个服务实例的配置问题。Disconf是一套完整的基于zookeeper的分布式配置统一解决方案。它支持配置(配置项+配置文件)的分布式化管理。
Distributed Configuration Management Platform(分布式配置管理平台)专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务。
这里写图片描述
包括 百度、滴滴打车、银联、网易、拉勾网 等知名互联网公司正在使用!

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

代码下载:https://github.com/knightliao/disconf-demos-java


2.安装依赖软件

Mysql,Tomcat,Nginx,Zookeeper,Redis

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

搭建我就不弄了,网上有很多教程,搭建起来可能会麻烦一下。说简单一点就是把各种配置弄好,放web服务器下就好了!
这里写图片描述

Disconf代码设计采用了静动分离设计,整个的代码的前后端完全分离。
通过Nginx(处理静态请求) + Tomcat(处理动态请求)达到处理请求的逻辑。
这里写图片描述

这里写图片描述


3.架构设计

这里写图片描述

Disconf通过disconf-web管理配置信息,然后将配置的key在Zookeeper上建立节点,disconf-client启动后拉取自身需要的配置信息并监听Zookeeper的节点。在web上更新配置信息会触发zk节点状态的变动,client可以实时感知到变化,然后从web上拉取最新配置信息。

disconf.preperties

#为上面nginx地址  
disconf.conf_server_host=localhost:8081  
#disconf需要指定应用的app名  
disconf.app=test  
#版本号,推荐x_x_x_x形式  
disconf.version=1_0_0_0  
#是否开启从远程仓库获取配置  
disconf.enable.remote.conf=true  
#指定获取环境,rd,qa,local,online四个值  
disconf.env=rd  
#忽略的分布式配置,用空格分隔  
disconf.ignore=  
#调试模式。调试模式下,ZK超时或断开连接后不会重新连接(常用于client单步debug)。非调试模式下,ZK超时或断开连接会自动重新连接。  
disconf.debug=false  
#获取远程配置 重试次数,默认是3次  
disconf.conf_server_url_retry_times=1  
#获取远程配置 重试时休眠时间,默认是2秒  
disconf.conf_server_url_retry_sleep_seconds=1  
#用户定义的下载文件夹, 远程文件下载后会放在这里。注意,此文件夹必须有有权限,否则无法下载到这里,默认./disconf/download  
disconf.user_define_download_dir=/disconf/download  
#下载的文件会被迁移到classpath根路径下,强烈建议将此选项置为 true(默认是true)     
disconf.enable_local_download_dir_in_class_path=false  

这里写图片描述

web主要用于管理配置项,当新建配置项后,会保存到DB的config及config-history表,并邮件通知app表对应的邮件地址。
对更新的配置项,会更新config表并新增记录到config-history表,邮件通知,同时添加zk节点(/disconf/app_version_env/file(或item)/配置项),当client端更新配置后,会在此节点下写入client标识,所以就有了web端的“实例列表”。
client启动后会从web拉取最新的配置文件信息,并监听相应的zk节点,当有数据变化时,zk会通知client,然后client重新从web拉取最新数据。
web的另外一个功能是配置项检查,每30分钟将DB config表中配置值与zk相比,发现不一致会邮件通知

Disconf只有如下7张表,功能描述如下:
app: app表,配置以app为核心。
config: 配置表。
config_history: 配置记录表,每更新每新增。
env: 环境表。
role: 角色表,用户有哪些角色。
role_resource: 角色权限对应的功能表。
user: 用户表,登录使用。
这里写图片描述


4.代码实现

 <dependency>
            <groupId>com.baidu.disconf</groupId>
            <artifactId>disconf-client</artifactId>
            <version>2.6.35</version>
</dependency>
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="demo" class="com.example.disconf.Demo"/>
    <!-- 增加了disconf配置中心 -->
    <bean id="disconfMgrBean" class="com.baidu.disconf.client.DisconfMgrBean" destroy-method="destroy">
        <!--扫描标注了disconf注解类所在包路径-->
        <property name="scanPackage" value="com.example.disconf"/>
    </bean>
    <bean id="disconfMgrBean2" class="com.baidu.disconf.client.DisconfMgrBeanSecond" init-method="init"
          destroy-method="destroy">
    </bean>
</beans>
package com.example.disconf;

import com.baidu.disconf.client.common.annotations.DisconfFile;
import com.baidu.disconf.client.common.annotations.DisconfFileItem;
import org.springframework.beans.factory.annotation.Value;
/**
 * Created by lanxinghua on 2018/7/13.
 */
@DisconfFile(filename = "login.properties")
public class Demo implements Idemo{
    @Value("11")
    private String gateSwitch;

    @DisconfFileItem(name = "gate.switch", associateField = "gateSwitch")
    public String getGateSwitch() {
        return gateSwitch;
    }

    public void setGateSwitch(String gateSwitch) {
        this.gateSwitch = gateSwitch;
    }

    public String getName() {
        System.out.println("进来getName方法");
        return gateSwitch;
    }
}

login.properties对应分布式管理配置中心的文件
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/m0_37499059/article/details/81027118