【NET CORE微服务一条龙应用】第二章 配置中心使用
背景
系列目录:【NET CORE微服务一条龙应用】开始篇与目录
在分布式或者微服务系统里,通过配置文件来管理配置内容,是一件比较令人痛苦的事情,再谨慎也有湿鞋的时候,这就是在项目架构发展的过程中,配置中心存在的意义。
其实配置中心的组件已经有非常出名的案例,比如携程的阿波罗配置中心(https://github.com/ctripcorp/apollo)
为什么又造轮子,因为不想发布项目的时候到处切管理平台。
基本要求
作为一个通用的配置组件,需要支持如下功能:
1、客户端定时刷新获信最新配置信息并进行热更新
2、配置有更新服务端主动推送重载或更新命令至客户端进行配置获取
所以涉及相对应组件如下:
1、支持广播的消息通知组件,目前使用redis(StackExchange.Redis)、Zookeeper(Rabbit.Zookeeper)实现客户端全局监听服务,服务端可以推送不同组建不同的命令
2、支持定时获取最新配置,目前使用HostedService实现全局统一启动,客户端实现全局启动接口,接口使用Timer进行定时获取配置
3、支持net core原生IConfiguration接口获取配置中心数据
服务端设计
管理服务端主要实现:
1、三表增删改查
2、配置内容表,每次新增或者修改,当前配置信息版本号为,所以配置最大版本号然后加一
3、应用表列表增加主动通知功能
配置查询服务端
主要提供配置信息的查询接口
1、接口入参如下
2、查询逻辑
2.1 入参基本验证
2.2 AppId 密钥进行签名验证
2.3 请求配置环境定位
2.4 查询当前请求应用和共有配置应用
2.5 查询大于当前查询版本号的配置信息并返回
配置中心客户端
客户端主要实现原理和功能
1、配置信息请求,当前Http请求,需根据配置信息组合请求url,然后请求获取配置,每次请求带上当前配置最大版本号(在以后请求时只获取有更新的配置)
2、配置信息本地存储(容灾),第一次获取成功后,把配置信息进行版本文件存储,以后的请求中当有配置更新时再进行文件存储。
3、当配置请求失败时进行本地文件配置信息的还原应用。
4、配置定时获取
5、客户端接收更新或者重载命令
6、原生IConfiguration配置查询支持
部分功能介绍
客户端参数
原生IConfiguration配置查询
查看AddJsonFile源码,可以发现实现自定义配置源,需要集成和实现ConfigurationProvider和IConfigurationSource两个方法
代码如下
当有配置更新时,我们需要更新到ConfigurationProvider的Data中,所以我们需要实现自定义接口IDataChangeListener的OnDataChange方法,当客户端请求发现有配置更新时,会调用接口的OnDataChange把最新的配置信息传递进来。
启用原生IConfiguration方法如下:
定时配置获取
常规做法是写一个hostedservice的方法,然后写一个timer去定时获取,由于其他的组件可能都需要有定时的情况,我们统一处理了一下定时的任务,每个组件实现IExecutionService接口,然后组件会在启动的时候循环调用IExecutionService的StartAsync的方法,组件包Bucket.Config.HostedService,原理比较简单,使用代码如下:
组件命令监听
和上面原则一样,也进行了统一的封装,目前监听主要实现了redis和zookeeper,下面举例redis
组件监听需实现接口
命令序列化实体
在hostedservice启动时实现
在接口IExtractCommand里会根据各个监听组件的ListenerName进行对应的调用
使用方法如下:
所以对应组件实现的命令监听只要关心自身逻辑即可吗,代码如下
配置中心使用配置如下
Appsettings.json相关配置信息转移至配置中心
由于配置中心客户端实现了原生的IConfiguration,所以appsetting的相关配置我们完全可以移至配置中心中,由于appsetting使用的是json,所以在配置中心服务端配置信息的Key需要转换,举例:
在配置中心key如下:
BucketListener:Redis:ConnectionString
BucketListener:Redis:ListenerKey
......
数组使用如下:
DbConfig:0:Name
DbConfig:0:DbType
DbConfig:1:Name
DbConfig:1:DbType
总结
个人写作水平有限,涉及的东西也很多,篇幅有限所以只做了大体介绍,忘谅解
本章涉及源码
https://github.com/q315523275/FamilyBucket/tree/master/src/Config 客户端组件
https://github.com/q315523275/FamilyBucket/tree/master/%E5%9F%BA%E7%A1%80%E6%9C%8D%E5%8A%A1%E9%A1%B9%E7%9B%AE/Pinzhi.ConfigServer 配置查询服务端
https://github.com/q315523275/FamilyBucket/tree/master/%E5%9F%BA%E7%A1%80%E6%9C%8D%E5%8A%A1%E9%A1%B9%E7%9B%AE/Pinzhi.Platform 综合管理服务接口
相关文章:
【NET CORE微服务一条龙应用】第一章 网关使用与配置
原文地址:https://www.cnblogs.com/tianxiangzhe/p/10342428.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
【NET CORE微服务一条龙应用】第二章 配置中心使用相关推荐
- 【NET CORE微服务一条龙应用】开始篇与目录
简介 随着业务的发展和变更,项目原先的分布式框架应用业务发展已有些不适应,所以18年初开始准备使用微服务框架,当时正好看到了ocelot项目,特意翻看了源码,发现很灵活和易扩展 于是就开始了微服务的开 ...
- 【NET CORE微服务一条龙应用】第三章 认证授权与动态权限配置
[NET CORE微服务一条龙应用]第三章 认证授权与动态权限配置 介绍 系列目录:[NET CORE微服务一条龙应用]开始篇与目录 在微服务的应用中,统一的认证授权是必不可少的组件,本文将介绍微服务 ...
- 【NET CORE微服务一条龙应用】应用部署
简介 本章主要介绍https://github.com/q315523275/FamilyBucket上微服务一条龙应用,在实际使用中的应用部署,以原始方式部署非docker 部署应用主要包括: 1. ...
- 《深入理解 Spring Cloud 与微服务构建》第二章 微服务应该具备的功能
<深入理解 Spring Cloud 与微服务构建>第二章 微服务应该具备的功能 文章目录 <深入理解 Spring Cloud 与微服务构建>第二章 微服务应该具备的功能 一 ...
- ASP.NET Core微服务(三)——【跨域配置】
ASP.NET Core微服务(三)--[跨域配置] 对应练习demo(跨域)下载路径(1积分):[https://download.csdn.net/download/feng8403000/151 ...
- 微服务架构spring cloud - 分布式配置中心config(七)
1.什么是spring-cloud-config 用来为分布式系统中的基础设施和微服务应用提供集体化的外部配置支持,它分为服务端和客户端.服务端也就是config服务,客户端就是其他的微服务. spr ...
- 微服务配置中心是干啥的_微服务入门到精通-分布式配置中心(续)
本文接之前的<Spring Cloud构建微服务架构(四)分布式配置中心>,继续来说说Spring Cloud Config的使用. 先来回顾一下,在前文中我们完成了什么: 构建了conf ...
- ASP.NET Core微服务(五)——【vue脚手架解析接口】
ASP.NET Core微服务(五)--[vue脚手架解析接口]: 后台接口请参照:ASP.NET Core微服务(三)--[跨域配置]:[https://blog.csdn.net/feng8403 ...
- ASP.NET Core微服务(七)——【docker部署linux上线】(RDS+API接口测试部分)
ASP.NET Core微服务(七)--[docker部署linux上线]: 本文测试采用阿里云的RDS(sqlserver服务器)+ECS(linux服務器)进行测试,由于是测试,[按量付费]买个最 ...
最新文章
- Codeforces1600数学day5[找规律CodeForces - 1059C,贪心数学A - Banh-mi CodeForces - 1062C ]
- HBase性能优化方法总结(4):读表操作
- Javascript模式阅读笔记 · 简介
- C#中MySQL语句带参数的模糊匹配问题
- android art虚拟机安装,Android中art虚拟机启动流程
- zookeeper使用和原理探究
- mysql 层_mysql各个层面优化
- 985硕士面试20场全被拒,被竞争困住的数据分析人,太难了
- 性能测试--jmeter中使用jsonpath提取响应结果【17】
- 开源BT磁力搜索引擎收集
- oracle快速为所有表新增字段
- 负责任的回应:开发Greenbelt网站
- AWS云计算专业术语认证必备
- React-Antd-表单-必选样式
- DOCKER笔记(1)
- .net EF框架—增删改查—ajax删除
- java zip压缩文件
- 知物由学 | 基于移动设备屏幕触摸数据的模拟点击检测研究与应用
- CF卡打开时出现USB乱码文件名的恢复方法
- 02-Python中文乱码
热门文章
- 公用ip地址查询_是什么使您无法更改公用IP地址并在Internet上造成严重破坏?
- pta7-7旅游规划(dijkstra算法)
- Android6.0到底有什么不一样
- 解决 web.xml is missing and failOnMissingWebXml is set to true 报错
- 一个C实现的线程池(产品暂未运用)
- 打造自己博客(wordpress)的wap手机版本
- 安装debian的zabbix-agent客户端
- 看懂通信协议:自定义通信协议设计之TLV编码应用
- 通过电话号码获取姓名 (+86或者飞信)
- 【贯穿】.NET6结合Docker傻瓜式实现容器编排