前言
大家好,明天开始给大家分享 — Dubbo 专题之 Dubbo 动静配置核心。在前一个章节中咱们介绍了 Dubbo 中的注册核心以及多种不同的注册核心实现,咱们在这个章节会介绍 Dubbo 动静配置核心。上面就让我疾速吧!
1. 配置核心简介
有小伙伴可能会问,那什么是配置核心呢?有什么作用呢?咱们平时在开发中可能会遇到这样一个场景。假如咱们有个对外接口须要动静调整开 / 关配置,来达到动态控制成果。咱们的实现计划可能有:存数据库、写文件等等,同时咱们也能够通过集中式、对立配置形式来动静治理,例如:Apollo、Nacos、Zookeeper 等提供了比传统数据库存储更弱小的性能,例如:多租户、实时同步、分布式等个性。咱们能够利用这些配置核心个性对咱们的 Dubbo 中的所有配置参数进行对立的动静治理。
依据上图咱们能够看到,当咱们变更配置核心参数时配置核心会告诉服务消费者和服务提供者。这样咱们就能够实现动静调整 Dubbo 中的参数。
2. 配置核心技术选型
咱们个别通过以下几个维度来掂量一个配置核心:
- 分布式配置对立治理
- 动静变更告诉
- 安全性
- 实时性
目前配置核心次要包含: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. 示例演示
- 部署 Nacos
Nacos 的部署我这里为了不便起见应用 Docker 镜像来部署,至于 Docker 环境各位小伙伴自行查问材料。因为是用于试验测试这里采纳单机模式:
-
下载我的项目
git clone https://github.com/nacos-group/nacos-docker.git cd nacos-docker
-
部署镜像
docker-compose -f example/standalone-derby.yaml up
应用浏览器输出地址:http://127.0.0.1:8848/nacos 登 …
Tips: 这里单机模式次要用于测试环境,切勿用于生产环境。
-
咱们以配置 Dubbo 相干参数到 Nacos 配置核心为例进行演示
我的项目构造如下:
服务提供端代码:
/**
* @author <a href="http://youngitman.tech"> 青年 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="http://youngitman.tech"> 青年 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();}
}
在下面的代码中,咱们应用注解的形式进行服务配置。同时咱们这里把注册核心地址、利用名称等配置放到配置核心。如下:
这里咱们就实现了动静配置核心,把所有的配置放在对立中央进行保护。
Tips: 这里的 Data ID 就是咱们利用的惟一标识、Group 就是分组信息,这里应用 Properties 的格局配置参数。
4. 小结
在本大节中咱们次要学习了 Dubbo 中的配置核心,其中咱们理解到什么是配置核心,同时咱们从多个维度也比照了目前比拟成熟和风行的配置核心,咱们在理论的利用场景中应依据不同的要求应用适宜的配置核心。
本节课程的重点如下:
- 了解 Dubbo 配置核心
- 理解常应用的配置核心
- 理解了怎么应用 Nacos 与 Dubbo 整合
- 理解咱们不同配置核心的劣势
作者
集体从事金融行业,就任过易极付、思建科技、某网约车平台等重庆一流技术团队,目前就任于某银行负责对立领取零碎建设。本身对金融行业有强烈的喜好。同时也实际大数据、数据存储、自动化集成和部署、散布式微服务、响应式编程、人工智能等畛域。同时也热衷于技术分享创建公众号和博客站点对常识体系进行分享。关注公众号: 青年 IT 男 获取最新技术文章推送!
博客地址: http://youngitman.tech
微信公众号:
常识星球: