携程apollo配置中心使用教程

一、apollo介绍:

下载项目地址:https://github.com/ctripcorp/apollo

架构图如下:

 四个核心模块及其主要功能:

1.ConfigService

(1)提供配置获取接口

(2)提供配置推送接口

(3)服务于Apollo客户端

2.AdminService

(1)提供配置管理接口

(2)提供配置修改发布接口

(3)服务于管理界面Portal

3.Client

(1)为应用获取配置,支持实时更新

(2)通过MetaServer获取ConfigService的服务列表

(3)使用客户端软负载SLB方式调用ConfigService

4.Portal

(1)配置管理界面

(2)通过MetaServer获取AdminService的服务列表

(3)使用客户端软负载SLB方式调用AdminService

 

三个辅助服务发现模块:

1.Eureka

(1)用于服务发现和注册

(2)Config/AdminService注册实例并定期报心跳

(3)和ConfigService住在一起部署

2.MetaServer

(1)Portal通过域名访问MetaServer获取AdminService的地址列表

(2)Client通过域名访问MetaServer获取ConfigService的地址列表

(3)相当于一个Eureka Proxy

(4)逻辑角色,和ConfigService住在一起部署

3.NginxLB

(1)和域名系统配合,协助Portal访问MetaServer获取AdminService地址列表

(2)和域名系统配合,协助Client访问MetaServer获取ConfigService地址列表

(3)和域名系统配合,协助用户访问Portal进行配置管理

 

二、如何在spring中整合apollo

(一)属性注入:

1.在MTEA-INF中创建app.properties文件

app.id=yidiankt

2.添加依赖


    com.ctrip.framework.apollo
    apollo-client
    1.1.2

3.cotrollo中增加@EnableApolloConfig注解

@RestController
@EnableApolloConfig
public class ApolloController {
    @Value("${dev.yidiankt.name}")
    private String str;

    @RequestMapping("/apollo")
    publc String apollo() {
        return "value:" + str;
    }
}

4.在resource中创建application.properties

apollo.meta=http://192.168.57.202:8080

 5.创建c:\opt\setting\server.properties文件

env=DEV

(二)bean注入:

1.创建bean类

@Component
@ConfigurationProperties("duoan")
public class DevConfig {
    private String mobile;

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
}

2.在controller中加入bean

@RestController
@EnableApolloConfig("iduoan")
public class ApolloController {
    @Value("${dev.yidiankt.email}")
    private String str;

    @Resource
    private DevConfig devConfig;

    @RequestMapping("/apollo")
    publc String apollo() {
        return "value:" + str + "bean:" + devConfig.getMobile();
    }
}

但是该bean的值更改后是不会实时刷新的,那如何才能实时刷新该bean的值呢?

1.首先加入依赖



    org.springframework.cloud
    spring-cloud-content
    2.0.1.RELEASE

2.创建ConfigRefresh类用于配置apollo及springcloud的自动刷新机制

@Component
public class ConfigRefresh {
    @Resource
    private DevConfig devConfig;

    @Resource
    private RefreshScope refreshScope;

    @ApolloConfigChangeListener
    public void onChange(ConfigChangeEvent changeEvent) {
        boolean configChange = false;
        for(String cKey : changeEvent.changedKeys()) {
            if(cKey.startsWith("duoan")) {
                configChange = true;
                break;
            }
        }

        if(!configChange) {
            return;
        }

        refreshScope.refresh(name: "devConfig");
    }
}

3.在DevConfig类中增加@RefreshScope注解

@Component
@ConfigurationProperties("duoan")
@RefreshScope
public class DevConfig {
    private String mobile;

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
}

 三、灰度发布:发布到部分客户端上,发布前需要制定灰度规则。

 

 

你可能感兴趣的:(apollo)