十分钟入门Apollo
一、Apollo简介
1.1 主流配置中心
- Disconf
 
2014年百度开源的配置中心,目前已不再维护
- Spring Cloud Config
 
2014年9月开源,是SpringCloud生态中的一员
- Apollo
 
2016年携程开源的配置管理中心,能够集中化管理不同环境、不同集群的配置,配置修改后能实时推送到应用端,并且具备权限管理的特性
- Nacos
 
2018年阿里开源,还可以做DNS和RPC的服务发现.

1.2 简介
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
二、快速入门
- 执行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=密码(如果没有密码,留空即可)
- 运行
 
./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
- 启动成功后访问http://localhost:8070
 

上面框住的是三个重要参数.环境、appid、namespace
新增配置操作:
先点击新增配置,然后发布即可.
- 编写客户端
 
新建一个项目,引入依赖
<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
三、核心概念

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值,那么启动项目时配置会直接生效.

                
            
        
浙公网安备 33010602011771号