十分钟入门Apollo

一、Apollo简介

1.1 主流配置中心

  • Disconf

2014年百度开源的配置中心,目前已不再维护

  • Spring Cloud Config

2014年9月开源,是SpringCloud生态中的一员

  • Apollo

2016年携程开源的配置管理中心,能够集中化管理不同环境、不同集群的配置,配置修改后能实时推送到应用端,并且具备权限管理的特性

  • Nacos

2018年阿里开源,还可以做DNS和RPC的服务发现.

十分钟入门Apollo

1.2 简介

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

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

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

二、快速入门

  1. 执行sql脚本

通过百度网盘下载,

提取码: 9wwe
2. 修改demo.sh

修改里面的数据库连接配置
仅修改如下部分即可.

apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=用户名
apollo_config_db_password=密码(如果没有密码,留空即可)

# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=用户名
apollo_portal_db_password=密码(如果没有密码,留空即可)
  1. 运行

./demo.sh start

我的电脑启动慢,所以我修改了demo.sh的等待时间将下面的24改成了60
如下:

function checkServerAlive {
  declare -i counter=0
  declare -i max_counter=24 # 24*5=120s
  declare -i total_time=0
  1. 启动成功后访问http://localhost:8070

十分钟入门Apollo

上面框住的是三个重要参数.环境、appid、namespace

新增配置操作:
先点击新增配置,然后发布即可.

  1. 编写客户端

新建一个项目,引入依赖

<dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>1.1.0</version>
        </dependency>
        
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.28</version>
        </dependency>

编写代码:

public class ConfigTest {

    public static void main(String[] args) {
        Config appConfig = ConfigService.getAppConfig();
        String property = appConfig.getProperty("test", null);
        System.out.println("获取到值:"+property);
    }
}

运行时vm参数:

-Dapp.id=SampleApp -Denv=DEV -Ddev_meta=http://localhost:8080

集群的指定

-Dapollo.cluster=shanghai

三、核心概念

十分钟入门Apollo

3.1 application(应用)

实际使用配置的应用

3.2 environment(环境)

应用里面包含多个环境

3.3 cluster(集群)

一个应用一个环境可能有多个集群.比如test应用的生产环境有北京集群和上海集群,那么他不同集群的配置也会不一样.

3.4 namespace(命名空间)

用于做一个分组的概念

四、常用操作

4.1 添加部门

管理员工具-》系统参数-》在key的输入框输入organizations,然后点击查询-》修改value值

后略

五、SpringBoot整合Apollo

5.1 引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.mmc</groupId>
    <artifactId>apollo-quickstart</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>1.1.0</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

    </dependencies>


</project>

5.2 配置文件

application.properties

app.id=account-service
apollo.bootstrap.enabled=true
#多个以逗号分隔
apollo.bootstrap.namespaces=application

apollo-env.properties

dev.meta=http://localhost:8080

5.3 启用Apollo注解

@SpringBootApplication
@EnableApolloConfig
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

5.4 启动时增加VM指令

-Denv=DEV -Dapollo.cacheDir=/opt/dir -Dapollo.cluster=DEFAULT

5.5 测试

@RestController
public class TestController {

    @Value("${myname}")
    private String myname;

    @RequestMapping("/test")
    public String test(){
        return myname;
    }
}

另外像spring的基本配置,如server.port,当我们在apollo里面配置了这个key值,那么启动项目时配置会直接生效.