执行流程
image.png image.png image.png工作原理:
发布配置原理:
image.png各个模块和职责
image.png- 用户在Potral后台更新配置后,点击发布按钮,会通过AdminSercie向ReleaseMessage表新增一条数据.
- ReleaseMessage是阿波罗自己使用数据表ReleaseMessage实现的类似消息队列机制.
- 客户端接收到配置的修改有两种方式:
第一:ConfigService查询ReleaseMessage表如果有新配置修改,则会主动发送一个http长连接请求给Client.
第二:Client每5分钟向ConfigService发送一次请求,查询最新配置信息(备选)
环境搭建
基础环境要求:
jdk1.8, mysql数据库建议5.7以上版本,低于5.7版本数据库默认不支持一个表中有两个时间时间戳timestamp类型字段的.如果是虚拟机安装虚拟内存>2G;
apollo-build-scripts-master 整个阿波罗环境包,使用一个命令启动整个阿波罗环境.
appollo-master 源码和依赖包,建议打包到master本地仓库.
创建两个数据库:
apolloconfigdb 存放配置文件信息数据.
apolloportaldb 存放阿波罗管理后台信息数据
* 参考搭建文章: Apollo配置中心搭建 & SpringBoot整合Apollo客户端
- 我将安装包解压到
/usr/local
目录下了:
image.png - 进入
apollo-build-scripts-master
目录下修改demo.sh
脚本,修改数据库连接信息和8080,8090和8070
三个服务端口, 我修改8080
为8081
后服务始终启动不起来,所以我就把本地8080端口先暂时停掉,启动apollo就ok了 - 启动
./demo.sh start
image.png -
8080
端口是eureka注册中心端口,因为apollo依赖与eureka, 将admin Server
和config Server
两个服务注册到注册中心,访问:http://127.0.0.1:8080/,结果如下:
image.png -
8070
端口是apollo后台管理端口:http://127.0.0.1:8070,默认的账号是apollo
,密码:admin
。 - 目前为止,阿波罗的配置中心就搭建完成了.
SpringBoot整合Apollo客户端实现从配置中心读取配置信息及配置中心更改配置后通知客户端实时更新
- 安装apollo依赖到本地或私服, 解压缩
apollo-master.zip
, 进入到脚本文件目录:
unzip apollo-master.zip
cd apollo-master/scripts
./build.sh
- 在configCenter父目录下创建一个maven Module项目
apollo-client
项目;
image.png -
pom.xml
内容如下:<?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"> <parent> <artifactId>configCenter</artifactId> <groupId>configCenter</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>apollo-client</artifactId> <dependencies> <!-- apollo 携程apollo配置中心框架 --> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-core</artifactId> <version>1.0.0</version> </dependency> </dependencies> </project>
- 新建配置文件
apollo-env.properties
,内容如下:
image.png
local.meta=http://127.0.0.1:8080
dev.meta=http://127.0.0.1:8080
fat.meta=${fat_meta}
uat.meta=${uat_meta}
lpt.meta=${lpt_meta}
pro.meta=${pro_meta}
- 在application.yml中配置从apollo服务端读取的
app.id
app.id: appId_1001
- 在apoll-client所在服务器中,修改
/opt/settings/server.properties
文件(没有则新建),内容如下:env=DEV
- 项目启动文件
ApolloClientApplication.java
添加@EnableApolloConfig
注解启动apollo客户端.
package apolloClient;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
//@EnableEurekaClient 将当前服务注册到Eureka
@EnableEurekaClient
//启用apollo客户端
@EnableApolloConfig
public class ApolloClientApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(ApolloClientApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ApolloClientApplication.class);
}
}
- 新建
DemoController.java
读取远程apollo服务中的配置文件信息.
package apolloClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
//这里是读取配置中心里面的自定义name属性,如果没有查询到name值默认=test
@Value("${name:test}")
String name;
@GetMapping("apollo")
public String getName() {
return name;
}
}
-
在apollo后台 (portal web) 中创建项目:
image.png
image.png - 阿波罗会为你的这个项目默认生成一个
DEV
环境,你可以通过新增配置按钮来新增配置项、通过发布按钮发布新建的配置项。 - 阿波罗客户端启动时会读取发布状态的配置项,如果在应用运行时发布
修改
过的或新增
的配置项,应用也会通过tcp长连接监听
到并及时同步。 -
这里新增一个配置 key=name,value=liangxifeng
image.png - 然后点击
发布
按钮, 发布后会显示已发布
状态
image.png - 启动
apollo-client
客户端后,访问:http://127.0.0.1:8201/apollo,就可以得到apllo服务端配置文件的name值. - 在远程服务端可以修改
name
值,修改后点击发布,客户端就可以动态获取最新值.
网友评论