关于java:全网最全的Apollo教程从入门到精通

38次阅读

共计 18145 个字符,预计需要花费 46 分钟才能阅读完成。

第 1 章 Apollo 我的项目实战

能力指标

  • 把握 Apollo 装置
  • 把握 Apollo 配置操作
  • 可能实现 SpringBoot 集成 Apollo
  • 可能实现 Apollo 实用性能【主动刷新、监听器、配置加密、1 灰度公布】

1 Apollo 利用

我的项目地址:https://github.com/ctripcorp/…

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

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/… 能够进行注销。

携程、华为、京东、智联招聘、中国移动、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/…)

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/…

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 服务端共须要两个数据库:ApolloPortalDBApolloConfigDB,咱们把数据库、表的创立和样例数据都别离筹备了 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:
    rm:
      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
    tm:
      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 中默认公有的 applicationnamespce中反对的是 properties 模式的,故须要将 yaml 转换成properties

能够应用在线转换工具:https://www.toyaml.com/index….

将转换实现的 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…

6、验证动静刷新:apollo也是反对Environment@Value 刷新

apollo 中批改 app.nameapp.version 查看动静刷新的后果

3 Apollo 其余利用

3.1 公共配置

apollo中的所有配置都有隶属的 namespace,而namespace 有两种类型:publicprivate,区别如下:

public:
公共的 Namespace 的配置能被任何我的项目读取
通过创立公共 Namespace 能够实现公共组件的配置,或多个利用共享同一份配置的需要
如果其它利用须要笼罩公共局部的配置,能够在其它利用那里关联公共 Namespace,而后在关联的 Namespace 外面配置须要笼罩的配置即可
如果其它利用不须要笼罩公共局部的配置,那么就不须要在其它利用那里关联公共 Namespace


private:
公有 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 配置核心
app:
  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…

配置关联

咱们接下来创立一个我的项目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…

3.3 配置刷新

@Value 和 Environment

后面曾经讲过,apollo反对 @ValueEnvironment动静刷新,而对于@ConfigurationProperties,能加载到配置,然而无奈主动刷新

1、创立 com.itheima.driver.properties.DriverProperties,读取后面配置的driver.namedriver.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…

在 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/…

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 {


    @Autowired
    private StringEncryptor encryptor;

    @Test
    public void encode() {
        String password = "root";
        System.out.println(encryptor.encrypt(password));
    }
}

测试运行输入的密文:3OzWpNao6JPFAHYHeWIrlw==

4、将密文配置到 apollo 中

咱们将密文配置到 Apollo 中,以 ENC(密文) 润饰,咱们对数据连贯中明码进行加密,如下图:

5、启动我的项目进行测试:http://localhost:18081/driver…

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 机器上失效

如果 namespacepublic的,能够依照 appidIP进行灰度

5、灰度下批改配置,要点击灰度公布才失效!

6、测试:

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

http://192.168.200.129:18081/… 是灰度版本

6、全量灰度公布在事实工作中是指灰度版本没有问题了,须要把所有服务的版本全副切换成实现测试的灰度版本,咱们点击全量公布即可, 全量公布的时候,咱们能够把灰度版本删除。

7、再次测试:

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

4 Apollo 多环境配置

事实中 Apollo 是要作多环境部署的,比方:devtestpro等等

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、筹备数据库,当初有两套环境,devpro 须要独自筹备数据库

192.168.200.129 上创立两套库,,次要是针对 apolloconfigdbapolloportaldb 只须要一份

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、批改端口占用抵触,当初在一台主机上部署了两套 adminserviceconfigservice,咱们批改 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-configserviceapollo-adminserviceapollo-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 的集群配置

本文由传智教育博学谷 – 狂野架构师教研团队公布,转载请注明出处!

如果本文对您有帮忙,欢送关注和点赞;如果您有任何倡议也可留言评论或私信,您的反对是我保持创作的能源

正文完
 0