apollo配置中心应用对接(这部分不涉及部署)

应用对接apollo

1:简介

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

服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要

额外安装Tomcat等应用容器。

官方github:https://github.com/ctripcorp/apollo

主要组件:

  1. apollo-configservice:提供配置获取接口,提供配置更新推送接口,接口服务对象为Apollo客户端
  2. apollo-adminservice:提供配置管理接口,提供配置修改、发布等接口,接口服务对象为Portal,以及Eureka
  3. apollo-portal:提供Web界面供用户管理配置
  4. apollo-client:Apollo提供的客户端程序,为应用提供配置获取、实时更新等功能

 

原理图:

 

  1. 上图简要描述了配置发布的大致过程:
  2. 用户在Portal操作配置发布
  3. Portal调用Admin Service的接口操作发布
  4. Admin Service发布配置后,发送ReleaseMessage给各个Config Service
  5. Config Service收到ReleaseMessage后,通知对应的客户端

 

2:应用程序如何对接

2.1:准备项目

  1. 登陆apollo的portal http://******:6060 

 

 

 

  1. 创建项目

 

          

注意应用id就是app.id后面会用到

 

 

  1.  添加集群选择环境,按照实际情况填写

 

关注点:Apollo默认会读取机器上/opt/settings/server.properties(linux)或C:\opt\settings\server.properties(windows)文件中的idc属性作为集群名字.

 

  1. 新增和发布配置

 

 

2.2:准备pom文件

由于apollo底层实现需要spring所以需要spring的依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.1.5.RELEASE</version>
</parent>

 

 

其它的依赖

<!-- 自己封装包 -->
<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-core</artifactId>
    <version>1.11.0.yc</version>
</dependency>

<!-- 自己封装包 -->
<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>1.11.0.yc</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.inject/guice -->
<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>4.2.2</version>
</dependency>


2.3:准备需要的文件参考:

  1. 准备server.properties文件

Windows机器:C:\opt\settings\server.properties

Linux机器:/opt/settings/server.properties

#env属性值是你选择的环境

env=FAT

#idc属性值是在创建集群时所填的集群名

idc=test-flink

 

  1. 确保classpath:/META-INF/app.properties文件存在,并且其中内容形如:app.id=YOUR-APP-ID

   由于apollo core jar包里面已经封装了apollo.meta信息,所以这里不需要指定

 

2.4:应用程序编写以及测试

1: flink整合apollo,样例代码

{
    public static void main(String[] args) throws Exception {
        // set up the streaming execution environment
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);
        env.setParallelism(1);
        env.addSource(new RichSourceFunction<String>() {

            private Config config;

            @Override
            public void open(Configuration parameters) throws Exception {
                super.open(parameters);
                config = ConfigService.getAppConfig();
                config.addChangeListener(new ConfigChangeListener() {
                    @Override
                    public void onChange(ConfigChangeEvent configChangeEvent) {
                        for (String key : configChangeEvent.changedKeys()) {
                            ConfigChange change = configChangeEvent.getChange(key);
                            System.out.println("changed key:"+change.getPropertyName()+"  changed old value:"+change.getOldValue()+" changed new value:"+change.getNewValue()
                            + change.getChangeType());
                        }
                    }
                });
            }

            @Override
            public void run(SourceContext<String> ctx) throws Exception {
                while (true) {
                    ctx.collect(config.getProperty("name", "zxr"));
                    Thread.sleep(3000);
                }
            }

            @Override
            public void cancel() {
            }
        }).print();

        env.execute("zxr flink Apollo");
    }
}

然后运行程序,控制台输出远程配置已经更新说明成功

此时,你可以去portal对发布的属性进行修改,比如我这里

把TIME_WINDOW_RANGE属性由1||100||1000||10000||30005 改成1||100||1000||10000||30000

Configserver很快监听到配置变化,并输出如下日志:

 

 

2: spring boot整合apollo,样例代码

import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.model.ConfigChange;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@EnableApolloConfig
@RestController
@SpringBootApplication
public class ApolloFlinkApplication {
    @ApolloConfig
    private Config config; //inject config for namespace application
    @Value("${TIME_WINDOW_RANGE:test}")//读取不到,默认赋值为test,避免应用启动报错
            String TIME_WINDOW_RANGE;

    @RequestMapping("apollo")
    public String apollo() {
        return TIME_WINDOW_RANGE;
    }

    @ApolloConfigChangeListener
    private void someOnChange(ConfigChangeEvent changeEvent) {
        //update injected value of batch if it is changed in Apollo
        for (String key : changeEvent.changedKeys()) {
            ConfigChange change = changeEvent.getChange(key);
            System.out.println("changed key:"+change.getPropertyName()+"  changed old value:"+change.getOldValue()+" changed new value:"+change.getNewValue()
                    + change.getChangeType());
        }
    }
    public static void main(String[] args) {

        SpringApplication.run(ApolloFlinkApplication.class, args);

    }

}

注意点:

1:由于删除应用影响面较大,所以现在暂无删除应用功能。此外,除了appId之外,其它app相关信息都能修改,所以不建议删除app。如果确实需要删除应用的话,可以参照下面的sql手动删除数据库相关的表。

2:建议app.id命名格式为:app.id={yourcompany}-{component}-{Usage}-{Environment}

Tips:

Yourcompany=yc

Component=flink/spark/hive/.......

Usage=realtime-etl/offline-etl/interfacelogview/.......

Environment=DEV/FAT/UAT/PRO

环境说明:DEV开发环境

          FAT测试环境,相当于alpha环境(功能测试)

          UAT集成环境,相当于beta环境(回归测试)

          PRO生产环境

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值