zoukankan      html  css  js  c++  java
  • 自建脚手架之配置中心--LightConf的实现

    常规项目开发过程中, 通常会将配置信息位于在项目resource目录下的properties文件文件中, 配置信息通常包括有: jdbc地址配置、redis地址配置、活动开关……等等。因此每次上线或者服务迁移的时候都要手动修改配置,并一台一台的重启服务器,甚是麻烦,且费时费力。
    于是便萌生出了使用配置中心的想法,在考察了github上的apoll,xxl-conf等开源项目后,感觉都不适合我司的应用模型,于是决定自研一套符合自己的配置中心,因此LightConf便应运而生,当然LightConf也借鉴了apoll,xxl-conf的部分代码实现。

    项目开源地址

    • 在经历了一个多月的开发后,项目的第一个稳定版本终于完成,开源地址https://github.com/haifeiWu/lightconf,欢迎各路大神star,拍砖。
    • LIGHTCONF使用了netty实现底层通讯,保证配置的实时生效。接入LIGHTCONF事只需要添加maven依赖,简单配置即可马上上手,学习零成本。

    一、简介

    1.1 概述

    LIGHTCONF 是一个配置管理平台,其核心设计目标是“为业务提供统一的配置管理服务”。

    1.2 特性

    • 1、简单易用: 上手非常简单, 只需要引入maven依赖和一行配置即可;
    • 2、在线管理: 提供配置管理中心, 支持在线管理配置信息;
    • 3、实时推送: 配置信息更新后,实时推送配置信息, 项目中配置数据会实时更新并生效, 不需要重启线上机器;
    • 4、配置备份: 配置数据会在MySQL中会对配置信息做备份, 保证配置数据的安全性;

    1.3 背景

    why not properties

    常规项目开发过程中, 通常会将配置信息位于在项目resource目录下的properties文件文件中, 配置信息通常包括有: jdbc地址配置、redis地址配置、活动开关、阈值配置、黑白名单……等等。使用properties维护配置信息将会导致以下几个问题:

    • 1、需要手动修改properties文件;
    • 2、需要重新编译打包;
    • 3、需要重启线上服务器 (项目集群时,更加令人崩溃) ;
    • 4、配置生效不及时: 因为流程复杂, 新的配置生效需要经历比较长的时间才可以生效;
    • 5、不同环境上线包不一致: 例如JDBC连接, 不同环境需要差异化配置;

    why LIGHTCONF

    • 1、不需要 (手动修改properties文件) : 在配置管理中心提供的Web界面中, 定位到指定配置项, 输入新的配置的值, 点击更新按钮即可;
    • 2、不需要 (重新编译打包) : 配置更新后, 实时推送新配置信息至项目中, 不需要编译打包;
    • 3、不需要 (重启线上服务器) : 配置更新后, 实时推送新配置信息至项目中, 实时生效, 不需要重启线上机器;
    • 4、配置生效 “非常及时” : 点击更新按钮, 新的配置信息将会即可推送到项目中, 瞬间生效, 非常及时。比如一些开关类型的配置, 配置变更后, 将会立刻推送至项目中并生效, 相对常规配置修改繁琐的流程, 及时性可谓天壤之别;
    • 5、LIGHTCONF使用netty实现底层的长连接通讯,部署足够的轻量级,只需要将项目中的lightconf-admin-web部署即可,不需要额外的安装Redis,zk等。

    源码仓库地址

    源码仓库地址 Release Download
    https://github.com/haifeiWu/lightconf Download

    1.5 环境

    • Maven3+
    • Jdk1.7+
    • Tomcat7+
    • Mysql5.5+

    二、快速入门

    2.1 初始化“数据库”

    请下载项目源码并解压,获取 “调度数据库初始化SQL脚本” 并执行即可。脚本位置如下:

    lightconf/doc/db/light-conf-0.1.1V.sql
    

    2.2 编译源码

    解压源码,按照maven格式将源码导入IDE, 使用maven进行编译即可

    • lightconf-admin:配置管理中心
    • lightconf-core:公共依赖
    • lightconf-common:公共依赖
    • lightconf-sample: 接入LIGHTCONF的Demo项目

    2.3 “配置管理中心” 项目配置

    项目:lightconf-admin
    作用:管理线上配置信息
    

    配置文件位置:

    lightconf/lightconf-admin/lightconf-admin-web/src/main/resources/light-conf.properties
    

    配置项目说明:

    # 配置登录lightconf的用户名,密码
    light.conf.login.username=admin
    light.conf.login.password=123456
    
    # mysql database setting
    jdbc.type=mysql
    jdbc.driver=com.mysql.jdbc.Driver
    
    jdbc.url=jdbc:mysql://localhost:3306/light-conf?useUnicode=true&characterEncoding=utf-8
    jdbc.username=root
    jdbc.password=root_pwd
    
    # pool settings
    jdbc.pool.init=2
    jdbc.pool.minIdle=3
    jdbc.pool.maxActive=20
    
    # jdbc.testSql=SELECT 'x'
    jdbc.testSql=SELECT 'x' FROM DUAL
    
    # 服务端启动监听端口
    netty.server.port=9998
    

    2.4 “接入LIGHTCONF的示例项目” 项目配置

    项目:lightconf-sample
    作用:接入LIGHTCONF的示例项目,供用户参考学习
    

    A、引入maven依赖

    <!-- lightconf-client -->
    <dependency>
        <groupId>com.lightconf</groupId>
        <artifactId>lightconf-core</artifactId>
        <version>${project.parent.version}</version>
    </dependency>
    

    B、添加 LIGHTCONF 配置文件

    可参考配置文件:
    lightconf/lightconf-sample/src/main/resources/light-conf.properties
    
    配置项说明:
    
    # 连接light-conf-admin的IP地址
    light.conf.host=127.0.0.1
    # 连接light-conf-admin的端口号
    light.conf.port=9998
    
    ## 接入应用的uuid
    application.uuid=8705d6c8-bbe0-420c-9853-f780de4cb5ea
    

    C、LIGHTCONF 配置初始化[必须]

    可参考配置文件:
    
    lightconf/lightconf-sample/src/main/resources/spring/applicationcontext-light-conf.xml
    
    配置项说明:
    
    <!-- ********************************* 核心配置[必须]:LIGHTCONF 配置 ********************************* -->
    <bean id="xxlConf" class="com.lightconf.core.spring.LightConfFactory" init-method="init" destroy-method="destroy" />
    
    <!-- ********************************* 核心配置[必须]:LIGHTCONF netty client监听 ********************************* -->
    <bean id="lightConfListener" class="com.lightconf.core.listener.LightConfClientListener"></bean>
    
  • 相关阅读:
    阿里云主机和RDS使用心得
    iOS_2_button控制物体形变
    js 继承概述
    Android 代码混淆
    “...”是字段,但此处被当作类型来使用
    Mali GPU OpenGL ES 应用性能优化--測试+定位+优化流程
    uva 213
    XML基础以及用DOM4j读取数据
    【Hibernate】Hibernate3.x独立执行时的Failed to load class &quot;org.slf4j.impl.StaticLoggerBinder&quot;错误
    《Pro Android Graphics》读书笔记之第六节
  • 原文地址:https://www.cnblogs.com/haifeiWu/p/9079560.html
Copyright © 2011-2022 走看看