Dubbo 动态配置中心

前言

大家好,今天开始给大家分享 — Dubbo 专题之 Dubbo 动态配置中心。在前一个章节中我们介绍了 Dubbo 中的注册中心以及多种不同的注册中心实现,我们在这个章节会介绍 Dubbo 动态配置中心。下面就让我快速吧!

1. 配置中心简介

有小伙伴可能会问,那什么是配置中心呢?有什么作用呢?我们平常在开发中可能会遇到这样一个场景。假设我们有个对外接口需要动态调整开/关配置,来达到动态控制效果。我们的实现方案可能有:存数据库、写文件等等,同时我们也可以通过集中式、统一配置方式来动态管理,例如:Apollo、Nacos、Zookeeper等提供了比传统数据库存储更强大的功能,例如:多租户、实时同步、分布式等特性。我们可以利用这些配置中心特性对我们的 Dubbo 中的所有配置参数进行统一的动态管理。

配置中心

根据上图我们可以看到,当我们变更配置中心参数时配置中心会通知服务消费者和服务提供者。这样我们就可以实现动态调整 Dubbo 中的参数。

2. 配置中心技术选型

我们一般通过以下几个维度来衡量一个配置中心:

  1. 分布式配置统一管理

  2. 动态变更通知

  3. 安全性

  4. 实时性

目前配置中心主要包括:Eureka(官方不维护)、Apollo、Spring Cloud Config、Nacos。它们的对比情况如下:

功能点 Spring Cloud Config Apollo Nacos
开源时间 2014.9 2016.5 2018.6
配置实时推送 支持(需要Spring Cloud Bus支持) 支持(HTTP长轮询) 支持(HTTP长轮询)
版本管理 支持(Git) 支持 支持
配置回滚 支持(Git) 支持 支持
灰度发布 支持 支持 待支持
权限管理 支持 支持 待支持
多集群 支持 支持 支持
多环境 支持 支持 支持
监听查询 支持 支持 支持
多语言 只支持Java Go、C++、Java、Python、PHP、.Net 、OpenAPI Java、Python、Node.js 、OpenAPI
单机部署 Config Server+Git+Spring Cloud Bus(支持配置实时推送) Apollo-quikstart+MySQL Nacos单节点
分布式部署 Config Server+Git+MQ Config+Admin+Portal+MYSQL Nacos+MySQL
配置格式校验 不支持 支持 支持
通讯协议 HTTP和AMQP HTTP HTTP

综合上面的参数我们不难看出不论是支持语言能力、运维部署难易程度、使用便捷性、功能完善程度上 Nacos 都是不错的选择。虽然 Apollo 在功能上确实强大,但是 Nacos 在使用难易程度上比 Apollo 强太多且 Nacos 更容易运维和部署,而 Spring Cloud Config 是一个不成熟的方案需要依赖太多且笨重。

3. 示例演示

  1. 部署 Nacos

Nacos 的部署我这里为了方便起见使用 Docker 镜像来部署,至于 Docker 环境各位小伙伴自行查询资料。由于是用于实验测试这里采用单机模式:

**Tips:**这里单机模式主要用于测试环境,切勿用于生产环境。

  1. 我们以配置 Dubbo 相关参数到 Nacos 配置中心为例进行演示

    项目结构如下:

idea1

服务提供端代码:

/**
 * @author <a href="https://www.proyy.com/?golink=aHR0cDovL3lvdW5naXRtYW4udGVjaA==" >青年IT男</a>
 * @version v1.0.0
 * @className Application
 * @description 动态配置中心 提供者
 * @JunitTest: {@link  }
 * @date 2020-10-24 21:49
 **/
//启动Dubbo注解扫描
@EnableDubbo(scanBasePackages = "com.muke.dubbocourse.dynamicconfig")
//激活Nacos配置并指定Nacos服务所在地址
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848")) // 激活 Nacos 配置
//指定我们的外部化配置唯一标识:dataId
@NacosPropertySource(dataId = "muke")
public class AnnotationApplication {

    public static void main(String[] args) throws IOException {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();

       //注册当前AnnotationApplication为配置类
        context.register(AnnotationApplication.class);

        //刷新Spring上下文
        context.refresh();

        //阻塞
        System.in.read();

    }

}
复制代码

服务消费者端代码:

/**
 * @author <a href="https://www.proyy.com/?golink=aHR0cDovL3lvdW5naXRtYW4udGVjaA==" >青年IT男</a>
 * @version v1.0.0
 * @className Application
 * @description 动态配置中心 服务消费者
 * @JunitTest: {@link  }
 * @date 2020-10-24 21:49
 **/
//启动Dubbo注解扫描
@EnableDubbo
//激活 Nacos 配置
@EnableNacosConfig 
//配置配置中心唯一标识:dataId
@NacosPropertySource(dataId = "muke")
public class AnnotationApplication {

    static {
        //指定nacos服务所在地址
        System.setProperty("nacos.server-addr", "127.0.0.1:8848");
    }

    //引用BookFacade的Dubbo服务
    @DubboReference(version = "0.0.1")
    private BookFacade bookFacade;

    public static void main(String[] args) throws IOException {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();

        //注册当前AnnotationApplication为配置类
        context.register(AnnotationApplication.class);

        //刷新Spring上下文
        context.refresh();

        //从容器中获取AnnotationApplication
        AnnotationApplication annotationApplication = context.getBean(AnnotationApplication.class);

        //调用服务方法
        System.out.println("Result=>"+annotationApplication.bookFacade.queryAll());

        //阻塞
        System.in.read();

    }

}

复制代码

在上面的代码中,我们使用注解的方式进行服务配置。同时我们这里把注册中心地址、应用名称等配置放到配置中心。如下:

idea3

这里我们就实现了动态配置中心,把所有的配置放在统一地方进行维护。

**Tips:**这里的 Data ID 就是我们应用的唯一标识、Group 就是分组信息,这里使用Properties的格式配置参数。

4. 小结

在本小节中我们主要学习了 Dubbo 中的配置中心,其中我们了解到什么是配置中心,同时我们从多个维度也对比了目前比较成熟和流行的配置中心,我们在实际的应用场景中应根据不同的要求使用适合的配置中心。

本节课程的重点如下:

  1. 理解 Dubbo 配置中心

  2. 了解常使用的配置中心

  3. 了解了怎样使用Nacos与 Dubbo 整合

  4. 了解我们不同配置中心的优势

作者

个人从事金融行业,就职过易极付、思建科技、某网约车平台等重庆一流技术团队,目前就职于某银行负责统一支付系统建设。自身对金融行业有强烈的爱好。同时也实践大数据、数据存储、自动化集成和部署、分布式微服务、响应式编程、人工智能等领域。同时也热衷于技术分享创立公众号和博客站点对知识体系进行分享。关注公众号:青年IT男 获取最新技术文章推送!

博客地址: youngitman.tech

微信公众号:

知识星球:

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享