Apollo源码分析(一):Apollo简介 & 架构演进

栏目: Java · 发布时间: 5年前

内容简介:1 简单,Apollo是我现在看起来最"简单"的源码不会像spring封装了一层又一层,把人绕晕,而apollo没有那么多封装,上手快,我们学习就应该从简单的开始,凭什么非要去学封的像粽子一样的spring源码,我们就是要去学简简单单,平时朴素,接地气的源码2 最接近业务代码的源码。而且里面有大量的业务代码,而我们其实平时写的最多的就是业务,它向我们展示了大神是如何来写业务的,如何来配置maven依赖,如何来处理异常,如何来输入参数判断

零 为何要学apollo源码

1 简单,Apollo是我现在看起来最"简单"的源码

不会像spring封装了一层又一层,把人绕晕,而apollo没有那么多封装,上手快,我们学习就应该从简单的开始,凭什么非要去学封的像粽子一样的spring源码,我们就是要去学简简单单,平时朴素,接地气的源码

2 最接近业务代码的源码。而且里面有大量的业务代码,而我们其实平时写的最多的就是业务,它向我们展示了大神是如何来写业务的,如何来配置maven依赖,如何来处理异常,如何来输入参数判断

比如它的maven依赖层次结构

Apollo源码分析(一):Apollo简介 & 架构演进

它使用不同的异常处理类

Apollo源码分析(一):Apollo简介 & 架构演进

它对DTO,排序等的使用

@RequestMapping(value = "/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/{namespaceName}/items", method = RequestMethod.GET)
 public List<ItemDTO> findItems(@PathVariable String appId, @PathVariable String env,
                             @PathVariable String clusterName, @PathVariable String namespaceName,
                             @RequestParam(defaultValue = "lineNum") String orderBy) {

List<ItemDTO> items = configService.findItems(appId, Env.valueOf(env), clusterName, namespaceName);
if ("lastModifiedTime".equals(orderBy)) {
  Collections.sort(items, (o1, o2) -> {

平凡而接地气,让我们有了学习的榜样

当然也有比较"高端"的,比如servlet3.0中的DeferredResult用来保持长连接

@RequestMapping(method = RequestMethod.GET)
public DeferredResult<ResponseEntity<List<ApolloConfigNotification>>> pollNotification(

自定义注解

@Import(ApolloConfigRegistrar.class)  //用import注解来载入bean
public @interface EnableApolloConfig {

//用ImportBeanDefinitionRegistrar来注册bean
public class ApolloConfigRegistrar implements ImportBeanDefinitionRegistrar {
  @Override
  public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

学习知识总是从皮毛开始,学产品也是从产品功能开始,让我们先来看下apollo的应用场景

一 应用场景

(载至apollo官方git)

1 传统开发

小A是XX团队主力开发,有一天产品说要上线一个迪士尼门票内购功能,由于迪士尼门票很火爆,产品一拍脑袋说,每个用户限购5张!

代码如下:

private static final int MAX_QTY_PER_USER = 5; //产品需求限购5张
if (qty > MAX_QTY_PER_USER ) {
    throw new IllegalStateException(
        String.format("每个用户最多购买%d张!", MAX_QTY_PER_USER ));
}

第二天中午,由于内购实在太火爆,产品急匆匆的跑过来对小A说,赶紧改成每人1张!

小A只好放弃了午饭,改代码、回归测试、上线,整整花了1个小时才搞定。。。

Apollo源码分析(一):Apollo简介 & 架构演进

2 Apollo开发

小B是YY团队主力开发,有一天产品说要上线一个欢乐谷门票抢购功能,由于欢乐谷门票很火爆,产品一拍脑袋说,每个用户限购5张!

小B吸取了小A的教训,二话不说把配置写在了Apollo配置中心

Apollo源码分析(一):Apollo简介 & 架构演进

第二天中午,由于内购实在太火爆,产品急匆匆的跑过来对小B说,赶紧改成每人1张!

小B不紧不慢的说:10秒内搞定~

Apollo源码分析(一):Apollo简介 & 架构演进

二 Apollo功能一览

  1. 配置修改实时生效: 配置可以做到准实时生效,再也不用改配置文件重新发版了
  2. 可视化配置管理:配置的后台管理系统
  3. 权限管理: 权限管理、发布审核、操作审计
  4. 环境管理: 统一不同环境、不同集群
  5. 版本管理: 版本管理、灰度发布

三 Apollo核心概念之namespace

  1. 公共类型: 应用之间共享配置
  2. 私有类型:应用独有的配置
  3. 关联类型:应用继承共享配置,并可覆盖(类似于类的继承)

Apollo源码分析(一):Apollo简介 & 架构演进

四 搭建Apollo服务

springboot接入非常简单,只需在maven里面加个依赖,然后启动类上加个@EnableApolloConfig就可以了,然后在配置项上使用@Value注解即可

搭建apollo服务还是要颇费一番功夫的,参考 《apollo开发指南》

五 架构演进

架构V1


以上所述就是小编给大家介绍的《Apollo源码分析(一):Apollo简介 & 架构演进》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Designing Data-Intensive Applications

Designing Data-Intensive Applications

Martin Kleppmann / O'Reilly Media / 2017-4-2 / USD 44.99

Data is at the center of many challenges in system design today. Difficult issues need to be figured out, such as scalability, consistency, reliability, efficiency, and maintainability. In addition, w......一起来看看 《Designing Data-Intensive Applications》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试