热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

参数微服务的全局_【NETCORE微服务一条龙应用】第二章配置中心使用

背景系列目录:【NETCORE微服务一条龙应用】开始篇与目录在分布式或者微服务系统里,通过配置文件来管理配置内容,是一件比较令人痛苦的事情
背景

系列目录:【NET CORE微服务一条龙应用】开始篇与目录

在分布式或者微服务系统里,通过配置文件来管理配置内容,是一件比较令人痛苦的事情,再谨慎也有湿鞋的时候,这就是在项目架构发展的过程中,配置中心存在的意义。

其实配置中心的组件已经有非常出名的案例,比如携程的阿波罗配置中心(https://github.com/ctripcorp/apollo)

为什么又造轮子,因为不想发布项目的时候到处切管理平台。

基本要求

作为一个通用的配置组件,需要支持如下功能:

1、客户端定时刷新获信最新配置信息并进行热更新

2、配置有更新服务端主动推送重载或更新命令至客户端进行配置获取

所以涉及相对应组件如下:

1、支持广播的消息通知组件,目前使用redis(StackExchange.Redis)、Zookeeper(Rabbit.Zookeeper)实现客户端全局监听服务,服务端可以推送不同组建不同的命令

2、支持定时获取最新配置,目前使用HostedService实现全局统一启动,客户端实现全局启动接口,接口使用Timer进行定时获取配置

3、支持net core原生IConfiguration接口获取配置中心数据

 服务端设计

 94d3bb18e656b44f450f7bc94e169834.png

管理服务端主要实现:

1、三表增删改查

2、配置内容表,每次新增或者修改,当前配置信息版本号为,所以配置最大版本号然后加一

3、应用表列表增加主动通知功能

配置查询服务端

主要提供配置信息的查询接口

1、接口入参如下

b67ba81b57dd5031351ad7b5ae2de9b6.png

2、查询逻辑

   2.1 入参基本验证

   2.2 AppId 密钥进行签名验证

   2.3 请求配置环境定位

   2.4 查询当前请求应用和共有配置应用

   2.5 查询大于当前查询版本号的配置信息并返回

配置中心客户端

客户端主要实现原理和功能

1、配置信息请求,当前Http请求,需根据配置信息组合请求url,然后请求获取配置,每次请求带上当前配置最大版本号(在以后请求时只获取有更新的配置)

2、配置信息本地存储(容灾),第一次获取成功后,把配置信息进行版本文件存储,以后的请求中当有配置更新时再进行文件存储。

3、当配置请求失败时进行本地文件配置信息的还原应用。

4、配置定时获取

5、客户端接收更新或者重载命令

6、原生IConfiguration配置查询支持

部分功能介绍

客户端参数

167d7769c60ca4d4f1d977fe222a16a2.png

原生IConfiguration配置查询

查看AddJsonFile源码,可以发现实现自定义配置源,需要集成和实现ConfigurationProvider和IConfigurationSource两个方法

代码如下

cac68d92c1b1d4cb45db6fb3d26e12f6.png

当有配置更新时,我们需要更新到ConfigurationProvider的Data中,所以我们需要实现自定义接口IDataChangeListener的OnDataChange方法,当客户端请求发现有配置更新时,会调用接口的OnDataChange把最新的配置信息传递进来。

启用原生IConfiguration方法如下:

1b5da95cfea4be6fe154b04e2bcaed71.png

定时配置获取

常规做法是写一个hostedservice的方法,然后写一个timer去定时获取,由于其他的组件可能都需要有定时的情况,我们统一处理了一下定时的任务,每个组件实现IExecutionService接口,然后组件会在启动的时候循环调用IExecutionService的StartAsync的方法,组件包Bucket.Config.HostedService,原理比较简单,使用代码如下:

23ab8077c27d9cf9225434b110dab59b.png

组件命令监听

和上面原则一样,也进行了统一的封装,目前监听主要实现了redis和zookeeper,下面举例redis

组件监听需实现接口

d265ce9caa65d8d986ca24875ebdb5c1.png

命令序列化实体

d8d38970f4b00d17a523c738a6ad47d0.png

在hostedservice启动时实现

e02760e5c3bf83bcccd8f7ac57b05b13.png

在接口IExtractCommand里会根据各个监听组件的ListenerName进行对应的调用

使用方法如下:

43149b3c840ca0552b103955f01dcf15.png

所以对应组件实现的命令监听只要关心自身逻辑即可吗,代码如下

f25dea4f6b23608790372a0f02cae167.png

配置中心使用配置如下

0778b0b29585ec134dd016dee9cfb4b4.png

Appsettings.json相关配置信息转移至配置中心

由于配置中心客户端实现了原生的IConfiguration,所以appsetting的相关配置我们完全可以移至配置中心中,由于appsetting使用的是json,所以在配置中心服务端配置信息的Key需要转换,举例:

35fc8e1fd04bcd1cddaea61ace8d526d.png

在配置中心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 7852482ce85a8f99f35b4d09127129a2.png




推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
author-avatar
手机用户2502887521
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有