一、搭建方式
搭建环境:macOS
搭建方式:采用quick start安装包的形式进行安装。
下载地址:https://github.com/nobodyiam/apollo-build-scripts
二、搭建过程
2.1 创建数据库
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。
注意:如果本地已经创建过Apollo数据库,请注意备份数据。准备的sql文件会清空Apollo相关的表。
2.1.1 创建ApolloPortalDB
通过各种MySQL客户端导入sql/apolloportaldb.sql即可。
导入成功后,可以通过执行以下sql语句来验证:
select `Id`, `AppId`, `Name` from ApolloPortalDB.App;
2.1.2 创建ApolloConfigDB
通过各种MySQL客户端导入sql/apolloconfigdb.sql即可。
导入成功后,可以通过执行以下sql语句来验证:
select `NamespaceId`, `Key`, `Value`, `Comment` from ApolloConfigDB.Item;
2.2 配置数据库连接信息
Apollo服务端需要知道如何连接到你前面创建的数据库,所以需要编辑demo.sh,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。
注意:填入的用户需要具备对ApolloPortalDB和ApolloConfigDB数据的读写权限。
#apollo config db info
apollo_config_db_url="jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_config_db_username=用户名
apollo_config_db_password=密码(如果没有密码,留空即可)
# apollo portal db info
apollo_portal_db_url="jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_portal_db_username=用户名
apollo_portal_db_password=密码(如果没有密码,留空即可)
注意:不要修改demo.sh的其它部分
2.8.2.3 执行启动脚本
./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!
2.8.2.4 配置参数
apollo服务端启动成功后,打开网页:http://localhost:8070/ 如图:
新建provider和consumer两个项目,然后设置两个参数,在provider服务端写一个获取参数的接口,看服务是否能获取到配置参数,修改参数然后发布参数,看服务端参数是否可以动态更改,以provider为例,如图:
provider服务端修改代码:
application.yml配置文件新增配置:
# 对应Apollo里的应用AppId
app:
id: micro-provider
apollo:
bootstrap:
enabled: true
# 添加 application 本身
# namespaces: application
# put apollo initialization before logging system initialization
eagerLoad:
enabled: true
# 关闭placeholder在运行时自动更新功能
autoUpdateInjectedSpringProperties: false
# apollo元地址
meta: http://localhost:8080
新增两个配置类:
ConfigBean:
package com.example.provider.config;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Value;
@Getter
@Setter
@ToString
public class ConfigBean {
@Value("${name:null}")
private String name;
@Value("${sex:null}")
private String sex;
}
AppConfig:
package com.example.provider.config;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableApolloConfig
public class AppConfig {
@Bean
public ConfigBean getConfigBean() {
return new ConfigBean();
}
}
controller里添加一个方法:
package com.example.provider.controller;
import com.example.provider.config.AppConfig;
import com.example.provider.config.ConfigBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
@Autowired
private AppConfig appConfig;
@GetMapping(value = "/get-config")
public ConfigBean getConfig() {
return appConfig.getConfigBean();
}
}
postman调用接口,如图:
三、上述总结
这里采用jar包的方式部署,有需要看源码的可以下载源码运行试试。
springcloud微服务整合Apollo方式不一,需要就实际情况和架构师习惯而言,所以具体问题具体对待。