学习笔记day03(apollo)

一、apollo在项目中的应用

1、pom引入依赖(此处为公司内部的api)

        <dependency>
        <groupId>com.bestpay.framework.apollo</groupId>
        <artifactId>apollo-client</artifactId>
        <version>1.3.0.6</version>
        </dependency>

2、配置文件

aplollo-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:apollo="http://www.ctrip.com/schema/apollo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd">

    <apollo:config namespaces="application, technology.dubbo-sh, technology.redis, technology.rf-mpersonal_fin, business.config,
    technology.kafka-hx, technology.elasticjob-ls, technology.hikaricp.config "/>
</beans>

 

<import resource="classpath:apollo-context.xml"/>

 application.properties

app.id=clp-pay-center
apollo.env=func
apollo.meta=http://172.17.46.16:20880

3.测试

public class Test extends BaseTest {
    @Value("${privateTradeType}")
    private String merchantNo;
    @org.junit.Test
    public void test(){
        System.out.println(merchantNo);
    }

可以看到用了@Value注解后就可以得到apollo所配置的值了

 在配置文件中也可以读取apollo的配置

 如:

 4.apollo配置的监听

@Slf4j
@Service
public class ApolloChangeListener {
    /**
     * Spring的LoggingSystem
     */
    @Autowired
    private LoggingSystem loggingSystem;


    private void onAppChange(ConfigChangeEvent changeEvent) {
        Set<String> changedKeys = changeEvent.changedKeys();
        for (String key : changedKeys) {
            ConfigChange change = changeEvent.getChange(key);
            String oldValue = change.getOldValue();
            String newValue = change.getNewValue();
            log.info("Apollo配置发生了更新,namespace=[{}], key=[{}], oldValue=[{}], newValue=[{}]",
                    changeEvent.getNamespace(), key, oldValue, newValue);
            System.out.println("Apollo配置发生了更新"+"namespace="+changeEvent.getNamespace()+"key="+key+"oldValue="+oldValue+"newValue="+newValue);
            // 日志等级改变
            if ("loggingLevelRoot".equals(key)) {
                log.info("应用日志级别更新,key=[{}], old=[{}], new=[{}]", key, oldValue, newValue);
                loggingSystem.setLogLevel("root", LogLevel.valueOf(newValue.toUpperCase()));
            }
        }
    }

二、apollo简介

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

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

 

特点

  • 统一管理不同环境、不同集群的配置
  • 配置修改实时生效(热发布)
  • 版本发布管理
  • 灰度发布
  • 权限管理、发布审核、操作审计
  • 客户端配置信息监控
  • 提供 Java和.Net原生客户端
  • 提供开放平台 API

  • 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进程中

Apollo客户端的实现原理:

  1. 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。(通过Http Long Polling实现)
  2. 客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。
    • 这是一个fallback机制,为了防止推送机制失效导致配置不更新
    • 客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified
    • 定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property: apollo.refreshInterval来覆盖,单位为分钟。
  3. 客户端从Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中
  4. 客户端会把从服务端获取到的配置在本地文件系统缓存一份
    • 在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置
  5. 应用程序可以从Apollo客户端获取最新的配置、订阅配置更新通知

https://www.cnblogs.com/dalianpai/p/14311014.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值