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


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

    (一)  环境要求

    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支持不完善。下载完成后,安装服务,命令行支持

     

    1. docker run -d --network host --restart always --name apollo
    2. -e PORTAL_DB="jdbc:mysql://192.168.1.215:3307/ApolloPortalDB?characterEncoding=utf8"
    3. -e PORTAL_DB_USER="root" -e PORTAL_DB_PWD="123456"
    4. -e FAT_DB="jdbc:mysql://192.168.1.215:3307/ApolloConfigDBFat?characterEncoding=utf8" -e FAT_DB_USER="root"
    5. -e FAT_DB_PWD="123456" idoop/docker-apollo:1.1.0

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

    docker ps | grep apollo

    命令,查看容器状态

     

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

     

    说明服务安装成功。

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

     

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

    1. 项目接入

      a)      Net

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

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

    1. <add key="AppID" value="test-app"/>
    2. <add key="Apollo.FAT.Meta" value="http://192.168.1.215:8081"/>

    读取配置

    帮助 Utils

    1. private static void OnChanged(object sender, ConfigChangeEventArgs changeEvent)
    2. {
    3. Console.WriteLine("Changes for namespace {0}", changeEvent.Namespace);
    4. foreach (string key in changeEvent.ChangedKeys)
    5. {
    6. ConfigChange change = changeEvent.GetChange(key);
    7. Console.WriteLine("Change - key: {0}, oldValue: {1}, newValue: {2}, changeType: {3}", change.PropertyName, change.OldValue, change.NewValue, change.ChangeType);
    8. }
    9. }
    10. static void Main(string[] args)
    11. {
    12. Config config = ConfigService.GetAppConfig();
    13. config.ConfigChanged += OnChanged;
    14. while (true)
    15. {
    16. Thread.Sleep(200);
    17. var timeout = config.GetProperty("timeout", "");
    18. Console.WriteLine(timeout);
    19. }
    20. }

    运行程序,输入我们在配置中定义的key,比如我设置的xxx,会返回micro,如图所示,这样服务就达到预期的效果

     

    b)      Java

    添加apollo-client包

    1. <dependency>
    2. <groupId>com.ctrip.framework.apollo</groupId>
    3. <artifactId>apollo-client</artifactId>
    4. <version>1.0.0</version>
    5. </dependency>

     

    编辑配置文件application.properties

    app.id配置APP的标志号

    env 环境名称,目前支持DEV、FAT、UAT、PRO

    apollo.meta config 服务

    1. app.id = test-app
    2. env = fat
    3. apollo.meta = http://192.168.1.215:8081

    application添加注解

    @EnableApolloConfig

    获取配置信息

    1. /**
    2. * 从apollo获取配置信息
    3. * */
    4. @ApolloConfig
    5. private Config config;
    6. @GetMapping("/read_config")
    7. public Properties apolloReadDemo(){
    8. /**
    9. * 得到当前app.id中的配置
    10. * */
    11. Set<String> set = config.getPropertyNames();
    12. for(String key : set){
    13. PropertiesUtils.properties.setProperty(key,config.getProperty(key,null));
    14. }
    15. for(String key : PropertiesUtils.properties.stringPropertyNames()){
    16. System.out.println(key+">>>"+PropertiesUtils.properties.getProperty(key));
    17. }
    18. return PropertiesUtils.properties;
    19. }

    启动项目,浏览器输入http://localhost:8089/apollo/read_demo地址查看返回结果, 8089换成你自己的项目端口号,返回如下信息,示意服务正常运行。

     

    这样分布式配置就介绍完了,主要介绍环境搭建及Net、java 项目接入,如果在开发中遇到问题,也可以留言共同探讨共同进步。


    欢迎沟通及共同进步
    QQ:1441299
    Email:1441299@qq.com

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

  • 相关阅读:
    Real Time Linux简介
    【AI】如何让两个图案重叠的部分变成透明
    能源计量器具的种类划分
    NI USRP RIO软件无线电
    Ubuntu的SELinux
    web serveer
    从gles,vulkan到metal(二)-- 同步和内存
    面经-虚拟机-类加载
    在线AI聊天对话机器人,答你所问!
    【ctfshow】web入门-信息搜集-web11~20
  • 原文地址:https://blog.csdn.net/lzh_boy/article/details/125615899