全网最全的Apollo教程从入门到精通(apollo使用)

  本篇文章为你整理了全网最全的Apollo教程从入门到精通(apollo使用)的详细内容,包含有apollo视频教程 apollo使用 apollo api apollo app 全网最全的Apollo教程从入门到精通,希望能帮助你了解 全网最全的Apollo教程从入门到精通。

  能够实现SpringBoot集成Apollo

  能够实现Apollo适用功能【自动刷新、监听器、配置加密、1灰度发布】

  1 Apollo应用

  项目地址:https://github.com/ctripcorp/apollo

  使用手册(多读多看):https://github.com/ctripcorp/apollo/wiki

  1.1 初识Apollo

  Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

  服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

  Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

  1)核心功能:

  

统一管理不同环境、不同集群配置:

 

   1:Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。

   2:同一份代码部署在不同的集群,可以有不同的配置,比如zk的地址等

   3:通过命名空间(namespace)可以很方便的支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖

   4:配置界面支持多语言(中文,English)

   用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序。

  版本发布管理:

   所有的配置发布都有版本概念,从而可以方便的支持配置的回滚。

  灰度发布:

   支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例。

  权限管理、发布审核、操作审计:

   1:应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。

   2:所有的操作都有审计日志,可以方便的追踪问题。

  客户端配置信息监控:

   可以方便的看到配置在被哪些实例使用

  提供Java和.Net原生客户端:

   1:提供了Java和.Net的原生客户端,方便应用集成

   2:支持Spring Placeholder,Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+)

   3:同时提供了Http接口,非Java和.Net应用也可以方便的使用

  提供开放平台API:

   1:Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。

   2:不过Apollo出于通用性考虑,对配置的修改不会做过多限制,只要符合基本的格式就能够保存。

   3:在我们的调研中发现,对于有些使用方,它们的配置可能会有比较复杂的格式,如xml, json,需要对格式做校验。

   4:还有一些使用方如DAL,不仅有特定的格式,而且对输入的值也需要进行校验后方可保存,如检查数据库、用户名和密码是否匹配。

   5:对于这类应用,Apollo支持应用方通过开放接口在Apollo进行配置的修改和发布,并且具备完善的授权和权限控制

  部署简单:

   1:配置中心作为基础服务,可用性要求非常高,这就要求Apollo对外部依赖尽可能地少

   2:目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来

   3:Apollo还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数

  

 

  2)谁在用它

  国内很多大厂都在用Apollo作为分布式配置中心,如果你们的网站也在用,在https://github.com/ctripcorp/apollo/issues/451可以进行登记。

  携程、华为、京东、智联招聘、中国移动、360金融、中通快递、转转、贝壳网、土巴兔、平安银行、有赞等众多国内大厂在用Apollo。

  1.2 Apollo单机部署

  我们接下来实现Apollo安装,安装前我们先介绍一下单机版装的架构,如下图:

  上图展示了Apollo单机部署架构,我们对其中每个节点进行解释说明:

  

Apollo Config Service:提供配置的读取、推送等功能,服务对象是 Apollo 客户端。

 

  Apollo Admin Service:提供配置的修改、发布等功能,服务对象是Apollo Portal。

  Apollo Portal:Apollo 的管理界面,进行不同项目的配置(项目配置、权限配置等),服务对象是开发者和开放平台API。

  

 

  环境说明:

  

MySQL:MySQL建议用5.7,版本要求5.6.5+

 

  Apollo服务端:JDK1.8+

  Apollo客户端:JDK1.7+

  

 

  Apollo安装方式有多种,官方提供了快速安装模式和Docker安装模式,我们把两种安装模式都实现一次,但如果是生产环境请使用分布式部署方案

  (https://github.com/ctripcorp/apollo/wiki/分布式部署指南)

  1.2.1 快速安装

  1)JDK版本:

  

[root@skywalking ~]# java -version

 

  java version "1.8.0_144"

  Java(TM) SE Runtime Environment (build 1.8.0_144-b01)

  Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

  

 

  2)MySQL版本:

  

SELECT VERSION()

 

  -----------------

  5.7.32-log

  

 

  3)安装包下载:

  Apollo已经准备好了一个Quick Start安装包apollo-quick-start.zip,里面包含了可以自动启动的jar包、以及所有依赖jar包、数据库脚本、内置Tomcat容器等,安装包共63M,大家只需要下载到本地,就可以直接使用,免去了编译、打包过程。

  Github下载地址:https://github.com/nobodyiam/apollo-build-scripts

  Quick Start只针对本地测试使用,所以一般用户不需要自己下载源码打包,只需要下载已经打好的包即可。不过也有部分用户希望在修改代码后重新打包,那么可以参考如下步骤:

  

1:修改apollo-configservice, apollo-adminservice和apollo-portal的pom.xml,注释掉spring-boot-maven-plugin和maven-assembly-plugin

 

  2:在根目录下执行mvn clean package -pl apollo-assembly -am -DskipTests=true

  3:复制apollo-assembly/target下的jar包,rename为apollo-all-in-one.jar

  

 

  4)创建数据库:

  Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。

  注意:如果你本地已经创建过Apollo数据库,请注意备份数据。我们准备的sql文件会清空Apollo相关的表。

  5)配置数据库连接:

  我们的数据库地址不是固定的,Apollo服务端需要知道如何连接到你前面创建的数据库,因此需要修改数据库连接地址,在安装包里有一个启动脚本demo.sh,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息:

  

# apollo config db info

 

  apollo_config_db_url="jdbc:mysql://192.168.200.129:3306/ApolloConfigDB?characterEncoding=utf8 serverTimezone=Asia/Shanghai"

  apollo_config_db_username=root

  apollo_config_db_password=root

  # apollo portal db info

  apollo_portal_db_url="jdbc:mysql://192.168.200.129:3306/ApolloPortalDB?characterEncoding=utf8 serverTimezone=Asia/Shanghai"

  apollo_portal_db_username=root

  apollo_portal_db_password=root

  

 

  6)启动服务:

  Quick Start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用,如果端口没有被使用,我们可以直接启动程序,启动程序执行demo.sh脚本即可,启动过程比较慢。

  

./demo.sh start 

 

  

 

  当看到如下输出后,就说明启动成功了!

  

==== starting service ====

 

  Service logging file is ./service/apollo-service.log

  Started [10768]

  Waiting for config service startup.......

  Config service started. You may visit http://localhost:8080 for service status now!

  Waiting for admin service startup....

  Admin service started

  ==== starting portal ====

  Portal logging file is ./portal/apollo-portal.log

  Started [10846]

  Waiting for portal startup......

  Portal started. You can visit http://localhost:8070 now!

  

 

  启动完成后访问 http://192.168.200.129:8070/,可以看到Apollo配置界面,登录账号apollo,密码admin

  1.2.2 Docker容器安装

  如果您对Docker非常熟悉,可以使用Docker的方式快速部署Apollo,从而快速的了解Apollo。确保docker-quick-start文件夹已经在本地存在,如果本地已经clone过Apollo的代码,则可以跳过此步骤。

  在docker-quick-start目录下执行docker-compose up,第一次执行会触发下载镜像等操作,需要耐心等待一些时间。

  搜索所有apollo-quick-start开头的日志,看到以下日志说明启动成功:

  

apollo-quick-start ==== starting service ====

 

  apollo-quick-start Service logging file is ./service/apollo-service.log

  apollo-quick-start Started [45]

  apollo-quick-start Waiting for config service startup.......

  apollo-quick-start Config service started. You may visit http://localhost:8080 for service status now!

  apollo-quick-start Waiting for admin service startup......

  apollo-quick-start Admin service started

  apollo-quick-start ==== starting portal ====

  apollo-quick-start Portal logging file is ./portal/apollo-portal.log

  apollo-quick-start Started [254]

  apollo-quick-start Waiting for portal startup.......

  apollo-quick-start Portal started. You can visit http://localhost:8070 now!

  

 

  不过基于Docker安装需要注意一些问题:

  

1:数据库的端口映射为13306,所以如果希望在宿主机上访问数据库,可以通过localhost:13306,用户名是root,密码留空。

 

  2:如要查看更多服务的日志,可以通过docker exec -it apollo-quick-start bash登录, 然后到/apollo-quick-start/service和/apollo-quick-start/portal下查看日志信息。

  

 

  安装完成后访问http://192.168.200.129:8070/,可以看到Apollo配置界面,

  2 基本使用

  登录apollo,进行如下操作

  2.1 创建项目

  1、登录后界面如下:

  2、创建项目

  点击创建应用,会出现如下表单:

  创建应用参数说明:

  部门:选择应用所在的部门。部门数据来自 ApolloPortalDB 库的 ServerConfig 表的 Key = organizations 对应的记录。

  应用 AppId:用来标识应用身份的唯一 id,格式为 string,需要和客户端 app.properties 中配置的 app.id 对应。

  应用名称:应用名,仅用于界面展示。

  应用负责人:默认具有项目管理员权限。

  项目管理员:可以创建 Namespace 和集群、分配用户权限。

  创建完成后如下图所示:

  2.2 创建配置

  我们在默认的namespace下创建配置信息,默认的namespace支持的是properties形式的配置,即:k=v结构的

  1、将hailtaxi-driver项目的配置托管到apollo中,在apollo中创建配置

  2、创建好的配置还未发布,一定要发布

  3、将hailtaxi-driver项目的其余配置从nacos中转移到apollo

  也就是说hailtaixi-driver项目中的所有配置如下:

  

management:

 

   endpoint:

   health:

   show-details: always

  app:

   name: 黑马顺风车

   version: v1.0

  spring:

   datasource:

   driver-class-name: com.mysql.cj.jdbc.Driver

   url: jdbc:mysql://127.0.0.1:3306/hailtaxi-driver?useUnicode=true characterEncoding=UTF-8 serverTimezone=UTC

   username: root

   password: root

  seata:

   enabled: true

   application-id: ${spring.application.name}

   tx-service-group: my_seata_group

   enable-auto-data-source-proxy: true

   use-jdk-proxy: false

   excludes-for-auto-proxying: firstClassNameForExclude,secondClassNameForExclude

   client:

   async-commit-buffer-limit: 1000

   report-retry-count: 5

   table-meta-check-enable: false

   report-success-enable: false

   saga-branch-register-enable: false

   lock:

   retry-interval: 10

   retry-times: 30

   retry-policy-branch-rollback-on-conflict: true

   degrade-check: false

   degrade-check-period: 2000

   degrade-check-allow-times: 10

   commit-retry-count: 5

   rollback-retry-count: 5

   undo:

   data-validation: true

   log-serialization: jackson

   log-table: undo_log

   only-care-update-columns: true

   log:

   exceptionRate: 100

   service:

   vgroup-mapping:

   my_seata_group: default

   enable-degrade: false

   disable-global-transaction: false

   transport:

   shutdown:

   wait: 3

   thread-factory:

   boss-thread-prefix: NettyBoss

   worker-thread-prefix: NettyServerNIOWorker

   server-executor-thread-prefix: NettyServerBizHandler

   share-boss-worker: false

   client-selector-thread-prefix: NettyClientSelector

   client-selector-thread-size: 1

   client-worker-thread-prefix: NettyClientWorkerThread

   worker-thread-size: default

   boss-thread-size: 1

   type: TCP

   server: NIO

   heartbeat: true

   serialization: seata

   compressor: none

   enable-client-batch-send-request: true

   registry:

   type: nacos

   nacos:

   application: seata-server

   server-addr: 192.168.200.129:8848

   group : "SEATA_GROUP"

   namespace: 1ebba5f6-49da-40cc-950b-f75c8f7d07b3

   username: "nacos"

   password: "nacos"

  

 

  注意:seata的namespace

  而apollo中默认私有的application的namespce中支持的是properties形式的,故需要将yaml转换成properties

  可以使用在线转换工具:https://www.toyaml.com/index.html

  将转换完成的properties添加到apollo中,可以使用批量添加

  添加完成后,发布!!!

  2.3 应用接入

  1、在hailtaxi-driver项目中 添加apollo的客户端依赖

  

 !--ApolloClient-- 

 

   dependency

   groupId com.ctrip.framework.apollo /groupId

   artifactId apollo-client /artifactId

   version 1.7.0 /version

   /dependency

  

 

  2、在bootstrap.yml配置文件中添加启动配置

  首先停用nacos配置中心

  

spring:

 

   cloud:

   nacos:

   config:

   # 关闭 nacos 配置中心

   enabled: false

  

 

  然后添加apollo的启动配置,

  3、配置appId,可以在META-INF/app.properties中配置

  

#使用的 Apollo 的项目(应用)编号 AppId

 

  app.id=hailtaxi-driver-config

  

 

  也可在applicaton.properties/bootstrap.yml中配置

  

# 启用apollo配置中心

 

  #app:

  # id: hailtaxi-driver-config

  apollo:

   meta: http://192.168.200.129:8080 # Apollo Meta Server 地址(它的注册中心地址,eureka地址)

   cacheDir: /opt/data

   bootstrap:

   enabled: true #是否开启 Apollo 配置预加载功能。默认为 false。

   eagerLoad:

   enable: true #是否开启 Apollo 支持日志级别的加载时机。默认为 false。

   # 指定 namespace

   namespaces: application #使用的 Apollo 的命名空间,默认为 application,多个用逗号隔开

  

 

  4、使用@EnableApolloConfig 开启apollo配置,通过-Denv=dev指定环境,不指定默认连接dev

  5、启动项目,访问:http://localhost:18081/driver/appinfo

  6、验证动态刷新:apollo也是支持Environment 和 @Value 刷新

  在apollo中修改app.name 和 app.version查看动态刷新的结果

  3 Apollo其他应用

  3.1 公共配置

  apollo中的所有配置都有从属的namespace,而namespace有两种类型:public和private,区别如下:

  

public:

 

  公共的Namespace的配置能被任何项目读取

  通过创建公共Namespace可以实现公共组件的配置,或多个应用共享同一份配置的需求

  如果其它应用需要覆盖公共部分的配置,可以在其它应用那里关联公共Namespace,然后在关联的Namespace里面配置需要覆盖的配置即可

  如果其它应用不需要覆盖公共部分的配置,那么就不需要在其它应用那里关联公共Namespace

  
私有Namespace的配置只能被所属的应用获取到

  通过创建一个私有的Namespace可以实现分组管理配置

  私有Namespace的格式可以是xml、yml、yaml、json、txt. 您可以通过apollo-client中ConfigFile接口来获取非properties格式Namespace的内容

  1.3.0及以上版本的apollo-client针对yaml/yml提供了更好的支持,可以通过ConfigService.getConfig("someNamespace.yml")直接获取Config对象,也可以通过@EnableApolloConfig("someNamespace.yml")或apollo.bootstrap.namespaces=someNamespace.yml注入yml配置到Spring/SpringBoot中去

  

 

  1、创建公共配置shared-datasource

  公共namespace下的配置只能是properties类型的

  2、假设现在数据源的配置作为公共配置,我们将数据源的配置添加到公共配置中

  首先从默认的application中删除数据源的配置

  然后在shared-datasource下添加

  

spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver

 

  spring.datasource.url = jdbc:mysql://127.0.0.1:3306/hailtaxi-driver?useUnicode=true characterEncoding=UTF-8 serverTimezone=UTC

  spring.datasource.username = root

  spring.datasource.password = root

  

 

  注意:删除和添加都要在对应的namespace中提交!!!

  3、在应用端(apollo客户端)的bootstrap.yml中添加namespace

  

# 启用apollo配置中心

 

   id: hailtaxi-driver-config #使用的 Apollo 的项目(应用)编号 AppId

  apollo:

   meta: http://192.168.200.129:8080 # Apollo Meta Server 地址(它的注册中心地址,eureka地址)

   bootstrap:

   enabled: true #是否开启 Apollo 配置预加载功能。默认为 false。

   eagerLoad:

   enable: true #是否开启 Apollo 支持日志级别的加载时机。默认为 false。

   # 指定namespace

   namespaces: application,shared-datasource #使用的 Apollo 的命名空间,默认为 application,多个用逗号隔开

  

 

  4、启动测试:http://localhost:18081/driver/info/1

  我们接下来创建一个项目hailtaxi-order,在它里面关联公共配置,

  然后创建namespace的时候关联公共配置

  完成后如下所示:

  当然如果对于有些公共配置,在本项目中我们还可以采取覆盖操作

  3.2 私有配置

  私有namespace下的配置是可以在创建namespace时指定类型的.

  1、在hailtaxi-driver-config项目中创建一个私有namespace

  创建完项目下的展示如下

  2、在mydriver中添加如下配置,

  

driver: 

 

   name: 唐僧老师

   age: 18

  

 

  我们添加部分信息如下图:

  3、在bootstrap.yml中添加namespace,这里需要注意一下私有的namespace名称如果是非properties的时,名字要带后缀

  4、找到DriverController,添加如下代码

  

@Value("${driver.name}")

 

  private String driverName;

  @Value("${driver.age}")

  private int driverAge;

  @GetMapping("/driverinfo")

  public String getDriverInfo() {

   return driverName + ";"+driverAge;

  

 

  5、启动,访问: http://localhost:18081/driver/driverinfo

  3.3 配置刷新

  @Value 和 Environment

  前面已经讲过,apollo支持@Value和Environment动态刷新,而对于@ConfigurationProperties,能加载到配置,但是无法自动刷新

  1、创建com.itheima.driver.properties.DriverProperties,读取前面配置的driver.name和driver.age信息

  

package com.itheima.driver.properties;

 

  import org.springframework.boot.context.properties.ConfigurationProperties;

  import org.springframework.context.annotation.Configuration;

  @Configuration

  @ConfigurationProperties(prefix = "driver")

  public class DriverProperties {

   private String name;

   private int age;

   public String getName() {

   return name;

   public void setName(String name) {

   this.name = name;

   public int getAge() {

   return age;

   public void setAge(int age) {

   this.age = age;

   @Override

   public String toString() {

   return "DriverProperties{" +

   "name=" + name + \ +

   ", age=" + age +

   };

  

 

  2、改造刚刚的com.itheima.driver.controller.DriverController#getDriverInfo方法

  

@Autowired

 

  private DriverProperties driverProperties;

  @GetMapping("/driverinfo")

  public String getDriverInfo() {

   return driverName + ";"+driverAge + ","+driverProperties;

  

 

  3、启动访问:http://localhost:18081/driver/driverinfo

  在apollo中修改配置,查看是否能刷新!!!

  Apollo监听器

  Apollo 已经能够满足我们绝大多数场景下的自动刷新配置的功能,但是项目中如果使用了@ConfigurationProperties此时只能借助Apollo的监听器功能实现数据刷新,可以先在监听器中读取变更的内容,然后调用指定的set方法执行重新赋值操作。

  我们在hailtaxi-driver中创建监听器com.itheima.driver.listener.ApolloConfigListener,代码如下:

  

@Component

 

  @Slf4j

  public class ApolloConfigListener implements ApplicationContextAware {

   private ApplicationContext applicationContext;

   @Autowired

   RefreshScope refreshScope;

   @ApolloConfigChangeListener(

   value = {"mydriver","application","test"} // 指定要监听的namespace

   // ,interestedKeyPrefixes = {"driver","app","person"} // 以driver开头的配置发生变更后会进行通知

   public void configChange(ConfigChangeEvent event) {

   // 配置发生变更后获取最新配置数据

   Set String changedKeys = event.changedKeys();

   for (String changedKey : changedKeys) {

   log.info("changed key = {}",changedKey);

   log.info("oldValue={},newValue={}",event.getChange(changedKey).getOldValue(),event.getChange(changedKey).getNewValue());

   this.applicationContext.publishEvent(new EnvironmentChangeEvent(event.changedKeys()));

   refreshScope.refreshAll();

   @Override

   public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

   this.applicationContext = applicationContext;

  

 

  测试发现properties类型的配置能被监听到!!!

  新建test名称空间(properties)类型,添加配置:

  

driver.name = 黑马程序员唐僧老师!!!

 

  driver.age = 18

  

 

  在apollo中修改配置,查看效果!!!

  3.4 配置加密

  考虑到安全性,我们可能最好将配置文件中的敏感信息进行加密。例如说,MySQL 的用户名密码、第三方平台的 Token 令牌等等。不过,Apollo 暂时未内置配置加密的功能。官方文档说明如下:

  项目地址:https://github.com/ctripcorp/apollo-use-cases/tree/master/spring-boot-encrypt

  1、在hailtaxi-driver中添加jasypt坐标依赖

  

 !--jasypt-- 

 

   dependency

   groupId com.github.ulisesbocchio /groupId

   artifactId jasypt-spring-boot-starter /artifactId

   version 3.0.3 /version

   /dependency

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-test /artifactId

   /dependency

   dependency

   groupId junit /groupId

   artifactId junit /artifactId

   scope test /scope

   /dependency

   dependency

   groupId org.springframework /groupId

   artifactId spring-test /artifactId

   scope test /scope

   /dependency

  

 

  2、配置jasypt加密算法及对应的密钥(放到bootstrap.yml中即可)

  

jasypt:

 

   encryptor:

   algorithm: PBEWithMD5AndDES

   #向量操作对象

   iv-generator-classname: org.jasypt.iv.NoIvGenerator

   password: itheima

  

 

  配置数据可以放到apollo中,!!!

  3、创建测试程序,将数据库密码加密:com.itheima.driver.DriverApplicationTest

  

@SpringBootTest

 

  @RunWith(SpringRunner.class)

  public class DriverApplicationTest {

  
4、将密文配置到apollo中

  我们将密文配置到Apollo中,以ENC(密文)修饰,我们对数据连接中密码进行加密,如下图:

  5、启动项目进行测试:http://localhost:18081/driver/info/1

  3.5 灰度发布

  通过创建灰度版本,您可以对某些配置做灰度测试
 

  灰度流程为:

  

1.创建灰度版本

 

  2.配置灰度配置项

  3.配置灰度规则.如果是私有的namespace可以按照客户端的IP进行灰度,如果是公共的namespace则可以同时按AppId和客户端的IP进行灰度

  4.灰度发布

  

 

  灰度版本最终有两种结果:全量发布和放弃灰度

  1、全量发布:灰度的配置合到主版本并发布,所有的客户端都会使用合并后的配置

  2、放弃灰度:删除灰度版本,所有的客户端都会使用回主版本的配置
 

  注意事项:如果灰度版本已经有灰度发布过,那么修改灰度规则后,无需再次灰度发布就立即生效

  1、将hailtaxi-driver打包,上传到192.168.200.129服务器上,

  2、在apollo中将`shared-datasource下将数据库的连接地址改一下,如下

  注意,数据库要开启远程访问权限!!!

  3、在129机器上启动hailtaxi-driver

  

java -jar hailtaxi-driver-1.0-SNAPSHOT.jar

 

  

 

  4、针对application命名空间下的配置进行灰度

  按照 IP 进行灰度,灰度配置只在129机器上生效

  如果namespace是public的,可以按照appid和IP进行灰度

  5、灰度下修改配置,要点击灰度发布才生效!

  6、测试:

  http://localhost:18081/driver/appinfo 还是原版本

  http://192.168.200.129:18081/driver/appinfo 是灰度版本

  6、全量灰度发布在现实工作中是指灰度版本没有问题了,需要把所有服务的版本全部切换成完成测试的灰度版本,我们点击全量发布即可,全量发布的时候,我们可以把灰度版本删除。

  7、再次测试:

  http://localhost:18081/driver/appinfo 均是灰度后的版本了!!!

  4 Apollo多环境配置

  现实中Apollo是要作多环境部署的,比如:dev,test,pro等等

  Apollo多环境配置的要点是,每多配置一个环境就多启动两套服务(apollo-adminsevice+apollo-configservice),apollo-portal服务永远只启动一套,所以我们的步骤是下载好这三套服务,按照自己设定的每个环境把文件分布好、设置好端口、数据库等,然后启动

  1、下载三个服务

  

wget https://github.com/ctripcorp/apollo/releases/download/v1.7.0/apollo-adminservice-1.7.0-github.zip

 

  wget https://github.com/ctripcorp/apollo/releases/download/v1.7.0/apollo-configservice-1.7.0-github.zip

  wget https://github.com/ctripcorp/apollo/releases/download/v1.7.0/apollo-portal-1.7.0-github.zip

  

 

  2、创建对应的目录并赋权限

  

mkdir -p adminservice/dev

 

  mkdir -p adminservice/pro

  mkdir -p configservice/dev

  mkdir -p configservice/pro

  mkdir portal

  chmod -R 755 adminservice/ configservice/ portal/

  

 

  3、解压到对应的目录下

  

unzip apollo-adminservice-1.7.0-github.zip -d adminservice/dev

 

  unzip apollo-adminservice-1.7.0-github.zip -d adminservice/pro/

  unzip apollo-configservice-1.7.0-github.zip -d configservice/dev

  unzip apollo-configservice-1.7.0-github.zip -d configservice/pro/

  unzip apollo-portal-1.7.0-github.zip -d portal

  

 

  4、准备数据库,现在有两套环境,dev和pro需要单独准备数据库

  在192.168.200.129上创建两套库,,主要是针对apolloconfigdb,apolloportaldb只需要一份

  5、在数据库中修改相关参数信息

  在apolloportaldb中增加环境列表

  6、确保apollo-configservice服务和apollo-adminservice服务启动时连接各自的数据库

  编辑

  /adminservice/dev/config/application-github.properties

  

spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloConfigDB_dev?characterEncoding=utf8

 

  spring.datasource.username = root

  spring.datasource.password = root

  

 

  /adminservice/pro/config/application-github.properties

  

spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloConfigDB_pro?characterEncoding=utf8

 

  spring.datasource.username = root

  spring.datasource.password = root

  

 

  编辑

  /configservice/dev/config/application-github.properties

  

# DataSource

 

  spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloConfigDB_dev?characterEncoding=utf8

  spring.datasource.username = root

  spring.datasource.password = root

  

 

  /configservice/pro/config/application-github.properties

  

# DataSource

 

  spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloConfigDB_pro?characterEncoding=utf8

  spring.datasource.username = root

  spring.datasource.password = root

  

 

  7、修改端口占用冲突,现在在一台主机上部署了两套adminservice和configservice,我们修改pro环境下这个两个服务占用的端口

  /adminservice/pro/scripts/startup.sh

  

## Adjust log dir if necessary

 

  LOG_DIR=/opt/logs/100003174

  ## Adjust server port if necessary

  SERVER_PORT=${SERVER_PORT:=8091}

  

 

  注意端口冲突,seata默认占用的端口也是8091

  /configservice/pro/scripts/startup.sh

  

## Adjust log dir if necessary

 

  LOG_DIR=/opt/logs/100003173

  ## Adjust server port if necessary

  SERVER_PORT=${SERVER_PORT:=8081}

  

 

  8、配置apollo-portal支持多套环境配置以及连接的数据库

  /portal/config/application-github.properties

  

# DataSource

 

  spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloPortalDB_all?characterEncoding=utf8

  spring.datasource.username = root

  spring.datasource.password = root

  

 

  /portal/config/apollo-env.properties

  

local.meta=http://localhost:8080

 

  dev.meta=http://localhost:8080

  fat.meta=http://fill-in-fat-meta-server:8080

  uat.meta=http://fill-in-uat-meta-server:8080

  lpt.meta=${lpt_meta}

  pro.meta=http://localhost:8081

  

 

  9、依次启动apollo-configservice,apollo-adminservice,apollo-portal

  

./configservice/dev/scripts/startup.sh

 

  ./configservice/pro/scripts/startup.sh

  ./adminservice/dev/scripts/startup.sh

  ./adminservice/pro/scripts/startup.sh

  ./portal/scripts/startup.sh

  

 

  10、验证,

  访问:http://192.168.200.129:8070

  11、应用接入时通过接入不同的meta server即可接入不同环境

  

apollo:

 

   meta: http://192.168.200.129:8080 #连接apollo meta server

  

 

  课后拓展:

  apollo的集群配置

  
本文由传智教育博学谷 - 狂野架构师教研团队发布
 

  如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力
 

  转载请注明出处!

  以上就是全网最全的Apollo教程从入门到精通(apollo使用)的详细内容,想要了解更多 全网最全的Apollo教程从入门到精通的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: