2021-04-22

SpringBoot进阶教程(七十二)整合Apollo

请叫我头头哥Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。


v架构一览

SpringBoot进阶教程(七十二)整合Apollo

上图简要描述了Apollo的总体设计:

  • Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
  • Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
  • Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳
  • 在Eureka之上我们架了一层Meta Server用于封装Eureka的服务发现接口
  • Client通过域名访问Meta Server获取Config Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试
  • Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试
  • 为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中

vDocker部署Apollo

1. 准备MySQL

git clone https://github.com/ctripcorp/apollo.git

将克隆的sql拷贝到docker实例中(docker实例中的路径/opt/apollo/script需要自行创建)(注意,也可以直接下载对应的两个sql脚本。)

docker cp /data/app/apollo/source-code/apollo/scripts/sql mysql3308:/opt/apollo/scripts

进入docker实例执行sql脚本。

docker exec -it mysql3308 bash

SpringBoot进阶教程(七十二)整合Apollo

2. 镜像拉取

docker pull apolloconfig/apollo-configservicedocker pull apolloconfig/apollo-adminservicedocker pull apolloconfig/apollo-portal

3. apollo-configservice

docker run -d \ --name apollo-configservice \ --net=host \ -v /tmp/logs:/opt/logs \ -e SPRING_DATASOURCE_URL="jdbc:mysql://ip.ip.ip.ip:3308/ApolloConfigDB?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root \ -e SPRING_DATASOURCE_PASSWORD=password \ apolloconfig/apollo-configservice

注意默认apollo-configservice的端口是8080, 可能会引起端口冲突。如果需要修改apollo-configservice的端口,记得同时修改Eureka的地址,在ApolloConfigDB库中ServerConfig表的value值,默认是8080的。否则其他服务注册不上去。

另外,若apollo和mysql都是一台虚机上的docker,mysql链接字符串 jdbc:mysql://ip.ip.ip.ip:3308/ApolloConfigDB?characterEncoding=utf8 中的ip.ip.ip.ip不要使用127.0.0.1。docker部署apollo中其它使用到ip的地方也不要使用127.0.0.1。

SPRING_DATASOURCE_URL: 对应环境ApolloConfigDB的地址

SPRING_DATASOURCE_USERNAME: 对应环境ApolloConfigDB的用户名

SPRING_DATASOURCE_PASSWORD: 对应环境ApolloConfigDB的密码

4. apollo-adminservice

docker run -d \ --name apollo-adminservice \ --net=host \ -v /tmp/logs:/opt/logs \ -e SPRING_DATASOURCE_URL="jdbc:mysql://ip.ip.ip.ip:3308/ApolloConfigDB?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root \ -e SPRING_DATASOURCE_PASSWORD=password \ apolloconfig/apollo-adminservice

SPRING_DATASOURCE_URL: 对应环境ApolloConfigDB的地址

SPRING_DATASOURCE_USERNAME: 对应环境ApolloConfigDB的用户名

SPRING_DATASOURCE_PASSWORD: 对应环境ApolloConfigDB的密码

5. apollo-portal

docker run -d \ --name apollo-portal \ --net=host \ -v /tmp/logs:/opt/logs \ -e SPRING_DATASOURCE_URL="jdbc:mysql://ip.ip.ip.ip:3308/ApolloPortalDB?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root \ -e SPRING_DATASOURCE_PASSWORD=password \ -e APOLLO_PORTAL_ENVS=dev \ -e DEV_META=http://ip.ip.ip.ip:8080 \ apolloconfig/apollo-portal

SPRING_DATASOURCE_URL: 对应环境ApolloPortalDB的地址

SPRING_DATASOURCE_USERNAME: 对应环境ApolloPortalDB的用户名

SPRING_DATASOURCE_PASSWORD: 对应环境ApolloPortalDB的密码

APOLLO_PORTAL_ENVS(可选): 对应ApolloPortalDB中的apollo.portal.envs配置项,如果没有在数据库中配置的话,可以通过此环境参数配置

DEV_META/PRO_META(可选): 配置对应环境的Meta Service地址,以${ENV}_META命名,需要注意的是如果配置了ApolloPortalDB中的apollo.portal.meta.servers配置,则以apollo.portal.meta.servers中的配置为准

6. 验证apollo

url访 src="https://img2020.cnblogs.com/blog/506684/202101/506684-20210121193859253-1052640978.png" alt="SpringBoot进阶教程(七十二)整合Apollo" loading="lazy">

7. 创建项目

点击首页创建项目,创建好了提交,然后回到首页即可看到创建好的项目。

SpringBoot进阶教程(七十二)整合Apollo

8. 新增配置

SpringBoot进阶教程(七十二)整合Apollo

9. 发布配置

SpringBoot进阶教程(七十二)整合Apollo

配置添加好选择好对应的环境之后,点击发布即可。

vspringboot整合Apollo

1. 添加引用

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

2. 添加配置

application.properties:

#AppId是应用的身份信息,是配置中心获取配置的一个重要信息。app.id=abc10086def#在应用启动阶段,向Spring容器注入被托管的application.properties文件的配置信息。apollo.bootstrap.enabled = true#开启apollo后你的Eureka注册中心的地址apollo.meta=http://toutou.com:8080#将Apollo配置加载提到初始化日志系统之前(1.2.0+)#从1.2.0版本开始,如果希望把日志相关的配置(如logging.level.root=info或logback-spring.

3. 接口代码

package learn.web.controller;import com.ctrip.framework.apollo.Config;import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;import learn.model.vo.Result;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.beans.factory.annotation.Value;import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;/** * @author toutou * @date by 2021/2 * @des https://www.cnblogs.com/toutou */@Slf4j@RestController@EnableApolloConfigpublic class IndexController { @Value("${demo.default.message}") private String helloMessage; @ApolloConfig private Config config; @GetMapping("apollo/message") public Result apolloMessage() {  return Result.setSuccessResult(config.getProperty("demo.default.message", "null")); } @GetMapping("apollo/message2") public Result apolloMessage2() {  return Result.setSuccessResult(helloMessage); }}

4. 验证效果

SpringBoot进阶教程(七十二)整合Apollo

5. 获取apollo配置的多种方式

 1.通过@value注解获取配置值  例如:  @Value("${demo.default.message}")  private String message; 2.通过@ConfigurationProperties注入到bean对象中获取配置信息  例如:  @ConfigurationProperties(prefix="test")  Public class Myprop{   private Map<String,String> prop = Maps.newLinkedHashMap();  }  在被spring管理的类中使用:  @Autowired  private Myprop myprop;  prop.getProp().get("name");  注:使用这种方式获取的属性值不会实时更新。 3.通过@ApolloConfig获取注入的config对象,再通过config对象获取属性值  例如:  在被spring管理的类中使用:  @ApolloConfig  private Config config;  config.getProperty("demo.default.message",null); 4.通过java API的方式获取  Config config = ConfigService.getAppConfig();  String someKey = "someKeyFromDefaultNamespace";  String someDefaultValue = "someDefaultValueForTheKey";  String value = config.getProperty(someKey, someDefaultValue); 5.在配置文件中获取属性值  例如:在application.properties中,  spring.datasource.name=${jdbc.name}  spring.datasource.password=${jdbc.password}

其他参考/学习资料:

  • https://github.com/ctripcorp/apollo/wiki
  • Spring Boot集成apollo配置中心

v源码地址

https://github.com/toutouge/javademosecond/tree/master/hellolearn


作  者:请叫我头头哥
出  处
关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!










原文转载:http://www.shaoqun.com/a/701739.html

跨境电商:https://www.ikjzd.com/

灯塔计划:https://www.ikjzd.com/w/1281

net-a-porter:https://www.ikjzd.com/w/2132


Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于SpringBoot和SpringCloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/S
关键词分析工具:https://www.ikjzd.com/w/1968
启明星软件:https://www.ikjzd.com/w/1436
sgshop:https://www.ikjzd.com/w/1982
网吧里的艳遇故事 口述网吧包厢里的荒诞经历:http://lady.shaoqun.com/m/a/275082.html
一周要闻!亚马逊整顿VC事件只为打假?:https://www.ikjzd.com/home/19199
亚马逊僵尸listing无主ASIN查找软件,"变废为宝":https://www.ikjzd.com/tl/94025

No comments:

Post a Comment