自建脚手架之配置中心--LightConf的实现

代码星冰乐

专注成就未来

首页 归档 关于

自建脚手架之配置中心--LightConf的实现

Apr 22, 2018 | haifeiWu | Java | 阅读
文章目录
  1. 1. 项目开源地址
  2. 2. 概述
    1. 2.1. 特性
    2. 2.2. 背景
      1. 2.2.1. 源码仓库地址
    3. 2.3. 环境
  3. 3. 快速入门
    1. 3.1. 初始化“数据库”
    2. 3.2. 编译源码
    3. 3.3. “配置管理中心” 项目配置
    4. 3.4. “接入LIGHTCONF的示例项目” 项目配置
      1. 3.4.1. 引入maven依赖
      2. 3.4.2. 添加 LIGHTCONF 配置文件
      3. 3.4.3. LIGHTCONF 配置初始化[必须]

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2018/3dd9/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。


由于版权原因,请阅读原文 --> 自建脚手架之配置中心--LightConf的实现

关注我们

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2018/3dd9/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2018/3dd9/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

常规项目开发过程中, 通常会将配置信息位于在项目 resource 目录下的 properties 文件文件中, 配置信息通常包括有: jdbc 地址配置、redis 地址配置、活动开关……等等。因此每次上线或者服务迁移的时候都要手动修改配置,并一台一台的重启服务器,甚是麻烦,且费时费力。

于是便萌生出了使用配置中心的想法,在考察了github上的apoll,xxl-conf等开源项目后,感觉都不适合我司的应用模型,于是决定自研一套符合自己的配置中心,因此LightConf便应运而生,当然 LightConf 也借鉴了 apoll,xxl-conf 的部分代码实现。

项目开源地址

  • 在经历了一个多月的开发后,项目的第一个稳定版本终于完成,开源地址 LightConf 。
  • LIGHTCONF 使用了 Netty 实现底层通讯,保证配置的实时生效。接入 LIGHTCONF 事只需要添加 maven 依赖,简单配置即可马上上手,学习零成本。

概述

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

特性

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

背景

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

环境

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

快速入门

初始化“数据库”

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

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

编译源码

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

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

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

项目: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

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

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

引入maven依赖

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

添加 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

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>

关注我们

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2018/3dd9/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

分享
Java配置中心
复杂业务下向Mysql导入30万条数据代码优化的踩坑记录《剑指Offer》50道算法面试题
微信关注我们
分类
  • Android8
  • Go4
  • Java59
  • Kafka,Java1
  • Kotlin2
  • Linux1
  • MapReduce1
  • Python2
  • Raft1
  • Redis1
  • ThreadPoolExecutor1
  • go1
  • 工具1
  • 总结8
  • 旅游日记1
标签
Nginx ChanghuiN haifeiWu Android Java 设计模式 hexo Kotlin 算法 MySQL 源码解析 Python Redis golang web Kafka 配置中心 总结 性能优化 旅游日记 Shell Go 问题排查 译文 Docker Spring Boot 工具 学习笔记 WebFlux 性能测试 go 散列表 源码 netty Raft
最近文章
  • Kafka的日志复制机制
  • 从20到21
  • go 并发编程
  • 【译】了解Linux CPU负载-您何时应该担心?
  • Zookeeper 与分布式锁
  • 基于Redis的分布式锁到底安全吗?
  • 【译】Raft 学生指南
  • ThreadPoolExecutor 的简单梳理
  • MapReduce 的简单实现
  • 使用 Map 实现策略模式
福利专区
    免费SSL证书
      阿里云红包
        腾讯云专属福利
        Copyright © 2021 代码星冰乐. Powered by ChanghuiN. 版权所有 晋ICP备15001365号
        特别感谢: 云服务器服务商 、 CDN 服务商