分布式配置中心之Apollo实战(二)

发表于:2021-8-13 09:40

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:行百里er    来源:掘金

  Apollo核心概念
  应用 application
  应用就是为服务项目,Apollo客户端在运行时需要知道每一个应用的标识,每个应用都需要有唯一的身份标识 -- appId,指定 appId 的方式有多种,SpringBoot项目建议直接配置在application.yml中,跟着项目走。
  环境 environment
  环境就是平常所说的开发、测试、预发布、生产等环境。Apollo客户端不仅需要知道应用的的身份标识,还需要知道应用所处的环境,因为不同的环境其配置是不一样的。
  分布式部署需要事先确定部署的环境以及部署方式。
  指定项目的环境也有多种方式,环境默认是通过读取机器上的配置(server.properties中的env属性)指定的,同时还支持通过Java System Property来指定。
  Apollo目前支持以下环境:
  · DEV 开发环境
  · FAT 测试环境,相当于alpha环境(功能测试)
  · UAT 集成环境,相当于beta环境(回归测试)
  · PRO 生产环境
  当然,你也可以通过源码
  com.ctrip.framework.apollo.core.enums.Env 和 com.ctrip.framework.apollo.core.enums.EnvUtils 来自定义环境。
  集群 cluster
  一个应用下不同实例的分组,比如典型的可以按照数据中心分,把上海机房的应用实例分为一个集群,把北京机房的应用实例分为另一个集群。
  对不同的cluster,同一个配置可以有不一样的值,如zookeeper地址。
  集群默认是通过读取机器上的配置(server.properties中的idc属性)指定的,不过也支持运行时通过Java System Property指定。
  命名空间 namespace
  · 一个应用下不同配置的分组。可以简单地把namespace类比为文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC配置文件,应用自身的配置文件等。
  · 应用可以直接读取到公共组件的配置namespace,如DAL,RPC等。
  · 应用也可以通过继承公共组件的配置namespace来对公共组件的配置做调整,如DAL的初始数据库连接数。
  实战
  Apollo配置中心搭建
  主机规划
  我用三台CentOS虚拟机搭建了一个简化版的Apollo配置中心:
  部署
  1、在 apollo-node-111 机器上
  准备工作
  根据前文所述的主机规划,需要在 apollo-node-111 机器部署数据库和DEV环境。
  修改相应的脚本:
  修改 admin service 的配置文件:
  vim /usr/local/apollo/apollo-adminservice/config/application-github.properties
  # 文件内容
  # DataSource
  spring.datasource.url = jdbc:mysql://192.168.242.111:3306/ApolloConfigDBTest?characterEncoding=utf8
  spring.datasource.username = root
  spring.datasource.password = 123456
  修改 config service 的配置文件:
  vim /usr/local/apollo/apollo-configservice/config/application-github.properties
  # 文件内容
  # DataSource
  spring.datasource.url = jdbc:mysql://192.168.242.111:3306/ApolloConfigDBTest?characterEncoding=utf8
  spring.datasource.username = root
  spring.datasource.password = 123456
  导入ApolloPortalDB和ApolloConfigDB数据库,并复制一个ApolloConfigDBTest库作为DEV环境的数据库(自行修改sql脚本)。
  # 进入到MySQL客户端
  mysql> source /usr/local/apollo/sql/apolloportaldb.sql;
  mysql> source /usr/local/apollo/sql/apolloconfigdb.sql;
  mysql> source /usr/local/apollo/sql/apolloconfigdbtest.sql;
  启动 Config Service ,执行脚本:
  /usr/local/apollo/apollo-configservice/scripts/startup.sh
  启动 Admin Service ,执行如下脚本:
  /usr/local/apollo/apollo-adminservice/scripts/startup.sh
  查看启动的服务:
  [root@apollo-node-111 ~]# jps
  76338 Jps
  75865 apollo-configservice.jar
  76174 apollo-adminservice.jar
  服务器 apollo-node-111 启动了config和admin两个服务。
  2.在 apollo-node-112 上
  修改 admin service、config service、portal 的配置文件,指定数据库地址均为192.168.242.111,配置方式同第1步。
  另外,Portal 还有个 apollo-env.properties 配置文件,修改其内容如下:
  dev.meta=http://192.168.242.111:8080
  pro.meta=http://192.168.242.112:8080,http://192.168.242.113:8080
  按照主机规划,在改机器上要启动三个服务:
  # 启动config service
  /usr/local/apollo/apollo-configservice/scripts/startup.sh
  # 启动admin service
  /usr/local/apollo/apollo-adminservice/scripts/startup.sh
  # 启动portal
  /usr/local/apollo/apollo-portal/scripts/startup.sh
  3.在 apollo-node-113 上
  修改 admin service、**config service**的配置文件,指定数据库地址均为192.168.242.111,配置方式同第1步。
  只启动 admin 和 config 两个服务,此处略。
  三台机器部署完成,输入 portal 地址:http://192.168.242.112:8070/
  默认用户名/密码:apollo/admin。
  实战
  登录到 Apollo Portal 后,添加项目、环境以及namespace可参考官方文档,这里不再赘述。
  下面开始使用 配置 。
  添加配置:
  发布一下:
  下面开始使用配置,新建一个SpringBoot项目,引入Apollo Maven依赖:
  <dependency>
      <groupId>com.ctrip.framework.apollo</groupId>
      <artifactId>apollo-client</artifactId>
      <version>1.8.0</version>
  </dependency>
  配置文件 application.properties :
  # 应用名称
  spring.application.name=apollo-demo
  # 应用服务 WEB 访问端口
  server.port=8080
  app.id=apollo-demo
  apollo.meta=http://192.168.242.112:8080,http://192.168.242.113:8080
  apollo.bootstrap.enabled=true
  apollo.bootstrap.namespace=common
  写一个测试Controller,使用注解方式获取配置,或者监听配置的更新:
  @RestController
  @RequestMapping("/test")
  public class TestController {
      @ApolloConfig
      private Config config;
      @GetMapping("/config/expiredMinutes")
      public String getExpiredMinutes() {
          return config.getProperty("expiredMinutes", "30");
      }
      @ApolloConfigChangeListener
      private void configOnChange(ConfigChangeEvent changeEvent) {
          if (changeEvent.isChanged("expiredMinutes")) {
              System.out.println("expiredMinutes发生了更新:" + config.getProperty("expiredMinutes", "30"));
          }
      }
  }
  项目启动后,访问/config/expiredMinutes得到配置项的值:
  现在来更新一下expiredMinutes:
  至此,我们就实现了Apollo配置中心的使用。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号