前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础架构之分布式配置中心

基础架构之分布式配置中心

原创
作者头像
低代码布道者
修改2022-07-29 11:38:55
2600
修改2022-07-29 11:38:55
举报
文章被收录于专栏:架构师聊技术架构师聊技术

随着项目的复杂度越来越高,微服务的盛行,各个中间件相互配合并发挥其优势,各种配置是避免不了的,以前尝试过配置放在文件,后来spring cloud 也推出了自己的spring cloud config 配置组件,功能上没有问题,但真正使用起来还是不顺手,顺势而为,携程开发部门开源了一套配置平台。

随着项目的复杂度越来越高,微服务的盛行,各个中间件相互配合并发挥其优势,各种配置是避免不了的,以前尝试过配置放在文件,后来spring cloud 也推出了自己的spring cloud config 配置组件,功能上没有问题,但真正使用起来还是不顺手,顺势而为,携程开发部门开源了一套配置平台,官方介绍详见 https://github.com/ctripcorp/apollo,这篇文章主要介绍安装及Java、Net 项目使用。

主要分享低代码、微服务、容器化、SAAS‬、系统架构方面的的‬内容‬‬,希望‬大家‬点赞‬,评论,关注‬。

(一) 环境要求

  1. Centos 7.5.1804
  2. Docker 18.06.1-ce

(二) 安装设置

  1. 数据库设置

a) 建库文件可以从官方下载或直接在我上传的百度网盘下载,点击下载,打开任何客户端执行Sql文件即可,可以看到两个数据库

ApolloconfigdbFat: 为具体环境配置库,因为不同环境需要配置不同的存储库

Apolloportaldb:为管理门户

  1. 服务安装,我用到的镜像为idoop/docker-apollo,版本号1.0.0,执行如下命令下载镜像,注意指定版本号 docker pull idoop/docker-apollo:1.0.0,因为最新版本对Net支持不完善。下载完成后,安装服务,命令行支持
代码语言:javascript
复制
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

主要注意环境数据库名字及账号信息、镜像版本。命令执行完成后,输入

代码语言:javascript
复制
docker ps | grep apollo

命令,查看容器状态

待容器状态为Up的时候,在浏览器输入 http://192.168.1.215:8070,进入管理门户,默认管理账号为apollo/admin。可以看到如下图示

说明服务安装成功。

  1. 设置,点击创建项目,设置项目的配置信息

确认没有问题,再点击发布,只有发布后,客户端才能接收到信息,这个功能很给赞,考虑的比较周全。

  1. 项目接入

  a) Net

添加apollo.net程序包(v1.5.0)

编辑App.config 或者其它配置文件

代码语言:javascript
复制
<add key="AppID" value="test-app" />
<add key="Apollo.FAT.Meta" value="http://192.168.1.215:8081" />

读取配置

帮助 Utils

代码语言:javascript
复制
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包

代码语言:javascript
复制
 <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 服务

代码语言:javascript
复制
 app.id = test-app env = fat apollo.meta = http://192.168.1.215:8081

application添加注解

代码语言:javascript
复制
@EnableApolloConfig

获取配置信息

代码语言:javascript
复制
    /**
     * 从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 项目接入,如果在开发中遇到问题,也可以留言共同探讨共同进步。

喜欢的朋友记得给个关注~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主要分享低代码、微服务、容器化、SAAS‬、系统架构方面的的‬内容‬‬,希望‬大家‬点赞‬,评论,关注‬。
  • 喜欢的朋友记得给个关注~
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档