前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apollo:微服务架构下的配置管理

Apollo:微服务架构下的配置管理

作者头像
猿天地
发布2019-06-18 20:45:28
8220
发布2019-06-18 20:45:28
举报
文章被收录于专栏:猿天地猿天地

问题背景

在实际工作中,我们的开发环境,测试环境,生产环境对应的 Mysql 数据库,Redis 这些信息都不一样,每个环境都有对应的一套配置,在 Spring Boot 中我们通常会编写多个配置文件,也就是每个环境一个配置文件。

比如:

application-dev.properties

代码语言:javascript
复制
spring.datasource.druid.url=jdbc:mysql://192.168.0.111:3306/xxx

application-test.properties

代码语言:javascript
复制
spring.datasource.druid.url=jdbc:mysql://192.168.0.112:4306/xxx

使用的时候指定使用哪个环境的配置:

代码语言:javascript
复制
java -jar xxx.jar --spring.profiles.active=test

在微服务架构下,服务的数量会比之前的单体应用多,部署的节点数量也会很多。当某些配置发生修改的时候,我们需要重新修改项目中的代码,然后重新发布。当然也可以直接通过上面的 --xxx 方式进行参数的传递,这种方式不好的地方在于项目中的配置跟线上发布的对应不上。

最简单的一个示例,直接修改项目中的配置,然后重新编译,发布,你改一次配置至少得10来分钟。对于某些活动的应用配置,可能在某个时候突然需要进行紧急修改,这样一来就被时间耽误了事情。

最好的办法是使用配置中心来集中管理配置,可以做到配置修改立马更新到客户端,只要1秒钟就可以搞定配置的修改,优势很明显。

框架推荐

今天给大家介绍一款在社区非常火的配置中心:Apollo

Github : https://github.com/ctripcorp/apollo

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

对Apollo本身就不做过多细致的介绍,感兴趣的朋友可以去 Github 详细了解。

今天主要是讲下在 Spring Boot 中如何对接 Apollo 进行配置管理。

首先你得部署好了Apollo,Apollo提供了一个快速体验包,大家可以下载下来直接启动,具体操作请参考 Github 。不过官方本身也为我们准备了一个演示的地址,我们可以直接用来学习:http://106.12.25.204:8070 账号/密码:apollo/admin

Spring Boot中使用

进入演示地址,找一个应用点进去:

我们基于默认的集群的application空间来做演示

准备一个 Spring Boot 项目,加入 Apollo Client 的 Maven 依赖:

代码语言:javascript
复制
<dependency>        <groupId>com.ctrip.framework.apollo</groupId>        <artifactId>apollo-client</artifactId>        <version>1.1.0</version></dependency>

然后配置Apollo的信息,配置放在application.properties中:

代码语言:javascript
复制
app.id=apollo-demoapollo.meta=http://106.12.25.204:8080apollo.bootstrap.enabled=trueapollo.bootstrap.namespaces=application
  • app.id:身份信息,就是应用名称,跟我们第一张图点进去的一样
  • apollo.meta:Meta Server(Config Service)
  • apollo.bootstrap.enabled:项目启动的bootstrap阶段,向Spring容器注入配置信息
  • apollo.bootstrap.namespaces:注入命名空间

环境我们直接在main方法中指定,演示方便:

代码语言:javascript
复制
@SpringBootApplicationpublic class App {    public static void main(String[] args) {        // 指定环境(开发演示用,不能用于生产环境))        System.setProperty("env", "DEV");        SpringApplication.run(App.class, args);    }}

我们可以准备一个接口进行测试配置的读取,配置读取的方式有很多种,我们就用最常用的@Value

代码语言:javascript
复制
@RestControllerpublic class DemoController {
    @Value("${test.username}")    private String name;
    @GetMapping("/callHello")    public String callHello() {        return name;    }
}

当配置修改之后,这边获取的值也会实时修改,大家可以自己测试下。本文只是简单的带大家体验了一下如何使用,还有很多东西没有讲解,如果大家想学习的话可以去我的网站进行学习,我录制了一套课程。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猿天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景
  • 框架推荐
  • Spring Boot中使用
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档