当前位置:网站首页>基础架构之分布式配置中心
基础架构之分布式配置中心
2022-07-29 11:41:00 【微服务布道者】
随着项目的复杂度越来越高,微服务的盛行,各个中间件相互配合并发挥其优势,各种配置是避免不了的,以前尝试过配置放在文件,后来spring cloud 也推出了自己的spring cloud config 配置组件,功能上没有问题,但真正使用起来还是不顺手,顺势而为,携程开发部门开源了一套配置平台。
官方介绍详见 https://github.com/ctripcorp/apollo,这篇文章主要介绍安装及Java、Net 项目使用。
(一) 环境要求
- Centos 7.5.1804
- Docker 18.06.1-ce
(二) 安装设置
- 数据库设置
a) 建库文件可以从官方下载或直接在我上传的百度网盘下载,点击下载,打开任何客户端执行Sql文件即可,可以看到两个数据库
ApolloconfigdbFat: 为具体环境配置库,因为不同环境需要配置不同的存储库
Apolloportaldb:为管理门户
- 服务安装,我用到的镜像为idoop/docker-apollo,版本号1.0.0,执行如下命令下载镜像,注意指定版本号 docker pull idoop/docker-apollo:1.0.0,因为最新版本对Net支持不完善。下载完成后,安装服务,命令行支持
docker run -d --network host --restart always --name apollo
-e PORTAL_DB="jdbc:mysql://192.168.1.215:3307/ApolloPortalDB?characterEncoding=utf8"
-e PORTAL_DB_USER="root"
-e PORTAL_DB_PWD="123456"
-e FAT_DB="jdbc:mysql://192.168.1.215:3307/ApolloConfigDBFat?characterEncoding=utf8" -e FAT_DB_USER="root" -e FAT_DB_PWD="123456"
idoop/docker-apollo:1.1.0
主要注意环境数据库名字及账号信息、镜像版本。命令执行完成后,输入
docker ps | grep apollo
命令,查看容器状态
待容器状态为Up的时候,在浏览器输入 http://192.168.1.215:8070,进入管理门户,默认管理账号为apollo/admin。可以看到如下图示
说明服务安装成功。
- 设置,点击创建项目,设置项目的配置信息
确认没有问题,再点击发布,只有发布后,客户端才能接收到信息,这个功能很给赞,考虑的比较周全。
- 项目接入
a) Net
添加apollo.net程序包(v1.5.0)
编辑App.config 或者其它配置文件
<add key="AppID" value="test-app" />
<add key="Apollo.FAT.Meta" value="http://192.168.1.215:8081" />
读取配置
帮助 Utils
private static void OnChanged(object sender, ConfigChangeEventArgs changeEvent)
{
Console.WriteLine("Changes for namespace {0}", changeEvent.Namespace);
foreach (string key in changeEvent.ChangedKeys)
{
ConfigChange change = changeEvent.GetChange(key);
Console.WriteLine("Change - key: {0}, oldValue: {1}, newValue: {2}, changeType: {3}", change.PropertyName, change.OldValue, change.NewValue, change.ChangeType);
}
}
static void Main(string[] args)
{
Config config = ConfigService.GetAppConfig();
config.ConfigChanged += OnChanged;
while (true)
{
Thread.Sleep(200);
var timeout = config.GetProperty("timeout", "");
Console.WriteLine(timeout);
}
}
运行程序,输入我们在配置中定义的key,比如我设置的xxx,会返回micro,如图所示,这样服务就达到预期的效果
b) Java
添加apollo-client包
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.0.0</version>
</dependency>
编辑配置文件application.properties
app.id配置APP的标志号
env 环境名称,目前支持DEV、FAT、UAT、PRO
apollo.meta config 服务
app.id = test-app env = fat apollo.meta = http://192.168.1.215:8081
application添加注解
@EnableApolloConfig
获取配置信息
/**
* 从apollo获取配置信息
* */
@ApolloConfig
private Config config;
@GetMapping("/read_config")
public Properties apolloReadDemo(){
/**
* 得到当前app.id中的配置
* */
Set<String> set = config.getPropertyNames();
for(String key : set){
PropertiesUtils.properties.setProperty(key,config.getProperty(key,null));
}
for(String key : PropertiesUtils.properties.stringPropertyNames()){
System.out.println(key+">>>"+PropertiesUtils.properties.getProperty(key));
}
return PropertiesUtils.properties;
}
启动项目,浏览器输入 http://localhost:8089/apollo/read_demo地址查看返回结果, 8089换成你自己的项目端口号,返回如下信息,示意服务正常运行。
这样分布式配置就介绍完了,主要介绍环境搭建及Net、java 项目接入,如果在开发中遇到问题,也可以留言共同探讨共同进步。
喜欢的朋友记得给个关注~
边栏推荐
- [SwiftUI 开发] @State @Binding @ObservedObject @EnvironmentObject
- GDB使用详解
- SkiaSharp of WPF custom painting to bounce ball (case)
- 深入理解C# 可空类型
- How to use grep to display file names and line numbers before matching lines
- WeChat red envelope test case
- MarkDown高阶语法手册
- "Knowledge Collection" article to understand mysql index!!(recommended collection)
- Peking University open classes are coming! Welcome to the "AI for science" class
- 精通音视频开发是真的可以为所欲为
猜你喜欢
AI全流程开发难题破解之钥
如何开始为您的 Kubernetes 应用程序编写 Helm 图表
puzzle(017.5)联动归位
怎么以管理员身份运行cmd?以管理员身份运行cmd方法介绍
微信云托管入门与实践
Peking University open classes are coming! Welcome to the "AI for science" class
MySql启动、连接sqlog、主从复制、双机热备(开机时)
企业微信客户朋友圈一天可以发多少条?都有哪些限制?如何突破朋友圈可展示人数限制?
Watch the open source summit first | quick view of the sub Forum & Activity agenda on July 29
Alibaba architects spent a year sorting out the "Lucene advanced document", and you are also a big factory employee!
随机推荐
HMS Core Discovery 16 review | with tiger mound, embracing new AI "voice" state
如何开始为您的 Kubernetes 应用程序编写 Helm 图表
Alluxio为Presto赋能跨云的自助服务能力
如何使用 grep 跨多行查找模式匹配
How to use grep to display file names and line numbers before matching lines
Learning with Recoverable Forgetting阅读心得
共建共享数字世界的根:阿里云打造全面的云原生开源生态
精通音视频开发是真的可以为所欲为
解决idea在debug模式下变得非常慢的问题
mysql单行,多行子查询
Pyqt5 rapid development and practice 6.6 qformlayout & 6.7 nested layout & 6.8 qsplitter
RediSearch 发布 v2.4.10 & v2.4.11 版本
How to use grep to find pattern matching across multiple lines
一次node文件操作过多排查过程总结
Great golang Road
面试官培训课件(非常实用的企业内训课件)
通过递归的方式实现树形结构
力扣sql刷题(四)
【表达式计算】表达式计算问题的通用解法(练习加强版,含总结)
"Knowledge Collection" article to understand mysql index!!(recommended collection)