springcloud 集成 apollo

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

这里是官方介绍: https://github.com/ctripcorp/apollo/wiki

项目的demo放在git地址: https://github.com/475cheng/apollo-demo-cheng

以下是个人在实践中的一些理解

一、Apollo 服务端  

Apollo服务端需要启动3个进程  

1. Apollo Config Service(提供配置获取接口、提供配置推送接口、服务于Apollo客户端)  
      进程中包含两个字模块  
      1. Eureka  
        基于Eureka和Spring Cloud Netflix提供服务注册和发现,Config Service和Admin Service会向Eureka注册服务,并保持心跳
      2. Meta Server  
        Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port)  
        Client通过域名访问Meta Server获取Config Service服务列表(IP+Port)  
        Meta Server从Eureka获取Config Service和Admin Service的服务信息,相当于是一个Eureka Client  
2. Apollo Admin Service(提供配置管理接口、提供配置修改发布接口、服务于管理界面Portal)
3. Apollo-Portal(配置管理界面、通过Meta Server获取Admin Service的服务列表、使用客户端软负载SLB方式调用AdminService)  

二、Apollo 客户端  

Apollo Clinet(通过访问Meta Server获取Config Service服务列表)而后直接通过IP+Port访问服务

官方准备好了服务端的启动包,包含了上面的3个进程,可以一个命令直接启动  服务端部署详情请查看官方文档https://github.com/ctripcorp/apollo/wiki/Quick-Start#%E4%B8%89%E5%90%AF%E5%8A%A8apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83

在部署完Apollo 服务端之后,就是把apollo client客户端 与项目集成了,这里以springboot为例

* 引入pom.xml
```xml
<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>1.1.0</version>
</dependency>
```

* 配置文件application.properties
```application.properties
#应用名
app.id=SampleApp
#Apollo Config Service地址 可以选择环境dev or pro
apollo.meta=http://localhost:8080
#开启集成apollo ApolloAutoConfiguration类上的注解
apollo.bootstrap.enabled = true
#配置文件的命名空间 默认是application.properties,多个逗号隔开 如果引入多个namespace的key相同,配置在前面的namespace生效。
apollo.bootstrap.namespaces = application,cheng
#如果指定集群名称 启动时java -jar a.jar -Dapollo.cluster=cluster
```  
图解如下:

 

* 获取Apollo中的配置如下 或者通过@Value("${redis.cache.clusterNodes}")方式获取配置信息,如果实体中是@Value可以实时改变.

```java
@ConfigurationProperties(prefix = "redis.cache")    //配置文件前缀
@Component("sampleRedisConfig") //bean的name
@RefreshScope      //动态更新
public class SampleRedisConfig {

  private int expireSeconds;
  private String clusterNodes;
  private int commandTimeout;
  //set get
}
```  

* **更新配置文件**
  * 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送
  * 客户端还会定时从Apollo配置中心服务端拉取应用的最新配置,可以适当调长,运行时指定System Property: apollo.refreshInterval来覆盖,单位为分钟

注意:配置中心能保证的是配置推送到应用程序,对于一些需要初始化的场景(比如数据库连接、redis连接、zk连接等),是需要额外的逻辑来实现热切换的
如果想热切换有2种方式  
第一种是调用 post请求调用http://localhost:3005/refresh 接口  
第二种是下面这种方式
```controller
    @Autowired
    private SampleRedisConfig sampleRedisConfig;
    @Autowired
    private RefreshScope refreshScope;
    public void test(){
          refreshScope.refresh("sampleRedisConfig");//刷新SampleRedisConfig这个类的最新配置
    }
```  
灰度发布:灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

灰度发布界面操作

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值