配置中心后端微服务【免费下载链接】disconfDistributed Configuration Management Platform(分布式配置管理平台)项目地址https://gitcode.com/gh_mirrors/di/disconf点击查看免费下载导读DisconfDistributed Configuration Management Platform是一套以 Java 实现的分布式配置管理平台整个仓库包含disconf-client客户端、disconf-web管理端 Web 平台、disconf-core核心库三个模块。本文依据仓库docs/source/install/下的官方安装文档系统讲解两条安装主线一是如何通过 Maven 依赖在业务工程中快速接入 disconf-client二是如何从零搭建 disconf-web 管理端——包括依赖软件选型、线上配置文件准备、构建脚本执行、数据库初始化、Tomcat 与 Nginx 的部署以及前后端分离架构说明。读完本文你将掌握 Disconf 全栈部署的标准动作并能对照仓库源码理解每一步背后的实现机制。一、disconf-client 安装一条 Maven 依赖即可接入disconf-client 的安装非常轻量只需在业务工程Maven 项目的pom.xml中加入如下依赖dependency groupIdcom.baidu.disconf/groupId artifactIddisconf-client/artifactId version2.6.36/version /dependency几点补充说明依据仓库源码版本号2.6.36与仓库根模块 pom.xml 中disconf-client.version、disconf-core.version完全一致三者是同一发布批次disconf-client 自身依赖 disconf-core核心库、zookeeper、gson、guava、aspectjtools 等组件Maven 引入时会自动传递解析无需手工额外声明接入后客户端通过扫描DisconfFile、DisconfItem、DisconfUpdateService等注解与 Zookeeper 节点协作实现配置的拉取、监听与动态更新相关注解定义可参考 DisconfFile.java、DisconfItem.java。二、disconf-web 安装部署全流程实战disconf-web 是分布式配置的 Web 管理平台官方文档推荐使用最新版 Chrome 或 Firefox 访问。其安装部署按以下顺序推进安装依赖软件 → 准备线上配置 → 执行构建 → 初始化数据库 → 部署 War → 部署前端 → 配置 host。2.1 安装依赖软件依据文档列出的版本参考软件版本参考MySQLVer 14.12 Distrib 5.0.45 (x86_64)Tomcatapache-tomcat-7.0.50Nginxnginx/1.5.3Zookeeperzookeeper-3.3.0Redis2.4.5以上版本是官方文档给出的部署基准实际部署请以可用的稳定版本为准。从仓库 pom.xml 可以看到disconf-web 依赖的 MySQL 驱动为mysql-connector-java 8.0.16Zookeeper 客户端版本为3.4.14运行时需保证与所部署的 Zookeeper/MySQL 服务端兼容。2.2 准备线上配置目录与配置文件文档要求将全部线上配置文件放到一个统一的配置目录以下地址可自行设定/home/work/dsp/disconf-rd/online-resources如果不确定如何配置可直接拷贝仓库中 disconf-web/profile/rd/ 目录下的文件拷贝过去后按需修改。需要准备的配置文件共 4 个jdbc-mysql.properties数据库配置redis-config.propertiesRedis 配置主要用于 Web 登录/登出会话zoo.propertiesZookeeper 配置application.properties应用配置。以下结合仓库中真实的profile/rd模板文件逐一说明这些模板文件即构建时的配置来源。1jdbc-mysql.properties —— 数据库连接仓库模板 disconf-web/profile/rd/jdbc-mysql.propertiesjdbc.driverClassNamecom.mysql.jdbc.Driver jdbc.db_0.urljdbc:mysql://127.0.0.1:3306/disconf?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNullrewriteBatchedStatementsfalse jdbc.db_0.usernameroot jdbc.db_0.password123456 jdbc.maxPoolSize20 jdbc.minPoolSize10 jdbc.initialPoolSize10 jdbc.idleConnectionTestPeriod1200 jdbc.maxIdleTime3600需要按实际环境修改库地址、账号密码连接串中已包含characterEncodingutf8等关键参数部署时请保持。连接池相关参数maxPoolSize、minPoolSize等可依据机器规格调整。2redis-config.properties —— 登录会话缓存仓库模板 disconf-web/profile/rd/redis-config.propertiesredis.group1.retry.times2 redis.group1.client1.nameBeidouRedis1 redis.group1.client1.host127.0.0.1 redis.group1.client1.port6379 redis.group1.client1.timeout5000 redis.group1.client1.passwordfoobared redis.group1.client2.nameBeidouRedis2 redis.group1.client2.host127.0.0.1 redis.group1.client2.port6380 redis.group1.client2.timeout5000 redis.group1.client2.passwordfoobared redis.evictor.delayCheckSeconds300 redis.evictor.checkPeriodSeconds30 redis.evictor.failedTimesToBeTickOut6这里必须特别注意文档中的加粗警告即使只有一个 Redis 实例也必须配置两个 redis client否则将造成内部错误。原因从配置结构即可看出redis.group1.client1与redis.group1.client2是同一分组内的两个客户端Web 端登录态正是通过 Redis 缓存Visitor对象实现的具体可参考 RedisLoginImpl.java——登录时把用户信息写入 RedisredisCacheMgr.put后续请求通过 Cookie 中的 key 从 Redis 读取会话redisCacheMgr.get登出时删除对应 key。因此该配置组件的完整性直接影响登录功能的可用性。3zoo.properties —— Zookeeper 集群与根路径仓库模板 disconf-web/profile/rd/zoo.propertieshosts127.0.0.1:8581,127.0.0.1:8582,127.0.0.1:8583 # zookeeper 的前缀路径名 zookeeper_url_prefix/disconfhosts为 Zookeeper 集群地址逗号分隔zookeeper_url_prefix为配置节点在 Zookeeper 上的根路径前缀。这两个属性在 applicationContext.xml 中被注入到ZooConfigBean对应 ZooConfig.java供 Zookeeper 驱动层读写配置节点使用。4application.properties —— 应用配置模板中没有直接提供application.properties官方文档明确要求先将application-demo.properties复制为application.propertiescp application-demo.properties application.properties仓库模板 disconf-web/profile/rd/application-demo.properties 内容如下# 服务器的domain domaindisconf.com # 邮箱设置 EMAIL_MONITOR_ON true EMAIL_HOST smtp.163.com EMAIL_HOST_PASSWORD password EMAIL_HOST_USER sender163.com EMAIL_PORT 25 DEFAULT_FROM_EMAIL disconf163.com # 定时校验中心配置与所有客户端配置的一致性 CHECK_CONSISTENCY_ON true各配置项说明domainWeb 平台对外域名必须与 Nginx 的server_name及浏览器访问域名一致详见 2.6 节邮箱相关配置用于异常/一致性校验告警邮件的发送对应ApplicationPropertyConfig中的 email 系列属性见 ApplicationPropertyConfig.javaCHECK_CONSISTENCY_ON是否开启配置中心与客户端配置的一致性定时校验。开启后ConfigConsistencyMonitorServiceImpl.java 会以Scheduled(fixedDelay 30 * 60 * 1000)每 30 分钟的周期遍历全部 APP/环境/版本比对 Zookeeper 上各实例上报的配置值与配置中心的值发现不一致时调用邮件服务向 APP 绑定的邮箱发送告警。注意在 applicationContext.xml 中application.properties、jdbc-mysql.properties、zoo.properties、redis-config.properties均通过PropertyPlaceholderConfigurer统一加载其中systemPropertiesModeName设为SYSTEM_PROPERTIES_MODE_OVERRIDE意味着 JVM 系统属性可覆盖配置文件中的值这是排查“改了配置不生效”类问题时需要留意的机制。2.3 执行构建脚本先设置两个环境变量部署目录可自行设定然后在disconf-web目录下执行部署脚本ONLINE_CONFIG_PATH/home/work/dsp/disconf-rd/online-resources WAR_ROOT_PATH/home/work/dsp/disconf-rd/war export ONLINE_CONFIG_PATH export WAR_ROOT_PATH cd disconf-web sh deploy/deploy.sh构建脚本 disconf-web/deploy/deploy.sh 的内部逻辑值得展开说明方便你理解产物结构与排错校验环境变量若ONLINE_CONFIG_PATH或WAR_ROOT_PATH为空脚本直接打印错误并exit 1拷贝线上配置将$ONLINE_CONFIG_PATH下的全部文件复制到src/main/online-resourcesJava 打包调用 disconf-web/deploy/build_java.sh 执行mvn clean与mvn package install -Dmaven.test.skiptrue -Ponline -U。这里使用了 Maven 的onlineprofile其核心作用是让 pom.xml 中配置的 war 插件把src/main/online-resources目录打进WEB-INF/classes与 war 根路径从而将真实线上配置覆盖进产物前端打包进入html目录执行python build.py前端模板工程详见 2.7 节说明产出拷贝在$WAR_ROOT_PATH下生成disconf-web.war并将前端构建产物拷入$WAR_ROOT_PATH/html随后用jar xvf解压 war展开出META-INF、WEB-INF等目录。最终在/home/work/dsp/disconf-rd/war下生成的完整结果为-disconf-web.war -html -META-INF -WEB-INF也就是说$WAR_ROOT_PATH同时充当了 Tomcat 的 docBase 与 Nginx 的静态根目录这是后续两步部署的基础。2.4 上线前的初始化工作数据库初始化初始化数据库可参考仓库内的 disconf-web/sql/readme.md必须按以下顺序依次执行4 个 SQL 文件0-init_table.sql 1-init_data.sql 201512/20151225.sql 20160701/20160701.sql各文件的作用0-init_table.sql创建disconf数据库及核心表包括appAPP 表、config配置表type字段区分配置文件/配置项、env环境表、role角色表、role_resource角色-URL 访问权限表、user用户表等1-init_data.sql初始化默认数据包含 6 个默认用户与若干角色/权限数据201512/20151225.sql新增config_history配置历史表并调整config表结构20160701/20160701.sql为config_history增加update_by列并补充“修改密码”URL 的角色权限记录。初始化脚本默认包含6 个用户文档特别提醒线上环境务必删除这些默认用户以避免潜在的安全问题namepwdadminadmintestUser1MhxzKhl9209testUser2MhxzKhl167testUser3MhxzKhl783testUser4MhxzKhl8758testUser5MhxzKhl112如果希望自定义初始化用户名信息可以运行仓库中的用户生成工具源码位于 disconf-web/src/main/java/com/baidu/disconf/web/tools/UserCreateTools.java该工具启动 Spring 上下文后调用UserCreateCommon生成“测试用户”与“指定用户”两类 INSERT SQL只生成 SQL不直接写入数据库其中指定用户示例为msoa管理员。2.5 部署 War修改 Tomcat server.xml修改 Tomcat 的server.xml在Host结点下设定Context使 docBase 指向 war 解压根目录Context path docBase/home/work/dsp/disconf-rd/war/Context同时将 Tomcat 端口设置为8015然后启动 Tomcat 即可。该端口与 2.6 节 Nginx 配置中的upstream地址127.0.0.1:8015严格对应务必保持一致。2.6 部署前端修改 nginx.conf修改nginx.conf完整配置如下upstream disconf { server 127.0.0.1:8015; } server { listen 8081; server_name disconf.com; access_log /home/work/var/logs/disconf/access.log; error_log /home/work/var/logs/disconf/error.log; location / { root /home/work/dsp/disconf-rd/war/html; if ($query_string) { expires max; } } location ~ ^/(api|export) { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://disconf; } }架构要点一目了然location /直接由 Nginx 提供war/html下的静态页面location ~ ^/(api|export)将API 与导出类动态请求反向代理到 Tomcatupstream disconf→127.0.0.1:8015这就是文档所述“Nginx 处理静态请求 Tomcat 处理动态请求”的前后端分离部署形态。2.7 关于 host域名一致性约束文档特别强调Nginx 配置中的 host示例为disconf.com可自定义必须与application.properties里的domain完全一致浏览器访问域名也必须是这个域名。其原因是 Web 端多处依赖该域名生成绝对地址例如 spring-servlet-interceptor.xml 中的拦截器配置直接读取${domain}用于登录/会话相关逻辑。若二者不一致可能出现登录态、回调地址或邮件链接异常。补充前端 HTML 采用模板化管理仓库 disconf-web/html/unitTpl/ 存放basehead/basefoot/nav/leftbar等模板单元disconf-web/html/mainTpl/ 存放各页面主模板由 Nodeejs/fs/eventproxy配合 disconf-web/html/tools/parse.js 渲染生成最终静态 HTML构建脚本 disconf-web/html/tools/gen_html.sh 即node parse.js。三、业务功能与界面操作说明部署完成后即可通过浏览器访问推荐 Chrome / Firefox默认管理员账号为admin/admin。3.1 核心业务功能官方文档列出的功能清单支持用户登录/登出浏览配置按APP / 版本 / 环境三个维度选择修改配置修改配置项、修改配置文件新建配置新建配置项、新建配置文件、新建 APP。3.2 主界面与配置列表字段主界面左上角可以选择 APP 和环境选择后中间区域出现该组合下的若干版本再选择版本后即展示在APP、环境、版本三个条件下的配置列表。列表各列含义APP使用哪个 APP 及其 IDKEY配置文件或配置项名称配置内容配置文件或配置项在配置中心中的值实例列表使用该配置的所有实例列表及每个实例的配置值若某实例的配置值与配置中心不一致界面会明确标识出来修改时间最后一次修改该配置的时间操作个性个性化编辑、删除、下载。右上角提供新建配置项、新建配置文件、新建 APP 的入口表格右上方支持批量下载所有配置文件到本地以及查看 Zookeeper 上的部署情况即各实例在 ZK 节点上的配置快照后台由ZkDeployMgr汇总。四、架构方案总结disconf-web 的整体架构为Nginx静态请求 Tomcat动态请求后端SpringMVC、JdbcTemplate、MySQL、RestFul APIRedis 承担用户登录/登出会话测试侧采用 H2 内存数据库 JUnit SpringTest见 pom.xml 中的 h2、junit、spring-test 依赖前端HTML、jQuery1.10.4工具集、Bootstrap2.3.2UI 框架Nodeejs/fs/eventproxy负责 HTML 模板化管理前后端接口前后端分离完全 Ajax 接口、JSON 数据格式、RestFul API 风格。该架构配合 Zookeeper 节点与 Redis 会话缓存共同支撑起“配置中心 多客户端实例”的分布式配置管理闭环。若需基于管理端做界面定制可进一步阅读仓库文档 12-open-api-for-web.md 了解 Web 开放 API 的能力边界。五、部署高频注意点汇总结合官方文档与仓库源码部署与运行时最容易踩坑的点集中如下Redis 必须配置两个 client即使只有一个 Redis 实例redis-config.properties中client1、client2缺一不可否则登录模块会报内部错误application.properties需手工创建模板只提供application-demo.properties务必执行cp生成后再修改SQL 执行顺序不可颠倒0-init_table.sql→1-init_data.sql→201512/20151225.sql→20160701/20160701.sql后两个为增量 patch默认用户必须清理初始化数据自带的 6 个默认账号在线上环境存在安全风险上线前应删除域名三处一致Nginxserver_name、application.properties的domain、浏览器访问地址必须统一端口链路Tomcat 8015 端口需与 Nginxupstream的server 127.0.0.1:8015一致Nginx 对外监听 8081构建环境变量ONLINE_CONFIG_PATH、WAR_ROOT_PATH必须提前 export且构建脚本只在disconf-web目录下执行否则脚本会直接退出。参考资源仓库内客户端 Maven 依赖声明disconf-client/pom.xml部署脚本disconf-web/deploy/deploy.sh、disconf-web/deploy/build_java.sh配置模板目录disconf-web/profile/rd/数据库初始化说明disconf-web/sql/readme.mdSpring 配置装配disconf-web/src/main/resources/applicationContext.xml登录会话实现RedisLoginImpl.java一致性校验任务ConfigConsistencyMonitorServiceImpl.java赞分享配置中心后端微服务【免费下载链接】disconfDistributed Configuration Management Platform(分布式配置管理平台)项目地址https://gitcode.com/gh_mirrors/di/disconf点击查看免费下载相关推荐如何快速掌握Disconf分布式配置管理平台入门指南如何快速掌握Disconf分布式配置管理平台入门指南 Disconf是一款功能强大的分布式配置管理平台它能够帮助开发团队实现配置的集中管理、动态更新和统一分配置中心后端微服务disconf 客户端接入指南通过 Maven 引入 disconf-client 并完成 Spring 集成配置disconf 客户端接入指南通过 Maven 引入 disconf client 并完成 Spring 集成配置 本指南以 disconf 官方安装文档中「配置中心后端微服务disconf-web 分布式配置管理平台 Web 控制台安装部署实战指南disconf web 分布式配置管理平台 Web 控制台安装部署实战指南 本指南以 DisconfDistributed Configuration Man配置中心后端微服务上一篇BiSheng JDK 11性能测试报告大数据场景下的实战表现下一篇abichecker 未来路线图ABI 兼容性检查工具的终极发展指南 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考