基本介绍
Apache Dubbo 是一款高性能的 Java RPC (Remote Procedure Call) 框架,其前身是阿里巴巴于 2011 年开源的一个高性能、轻量级的分布式服务框架。2018 年 Dubbo 正式进入 Apache 孵化器,成为 Apache 顶级项目。
Dubbo 的核心特性包括:
- 高性能的网络通信:基于 Netty 实现高效的 NIO 通信
- 服务自动注册与发现:支持多种注册中心如 ZooKeeper、Nacos 等
- 负载均衡:提供多种负载均衡策略如随机、轮询、一致性哈希等
- 服务容错:支持失败重试、快速失败、故障转移等容错机制
- 服务治理:提供丰富的服务治理功能如服务降级、访问控制等
服务治理(SOA Governance)
服务治理是企业为了确保 SOA (Service-Oriented Architecture) 项目顺利完成而实施的一系列管理过程,主要包括以下方面:
- 最佳实践:如服务拆分原则、接口设计规范等
- 架构原则:如服务松耦合、服务自治等
- 治理规程:包括服务生命周期管理、变更管理等
核心角色
Provider(服务提供方):
- 具体实现业务逻辑的服务实例
- 在启动时向注册中心注册自己提供的服务接口
Consumer(服务消费方):
- 调用远程服务的客户端应用
- 启动时订阅所需服务,获取提供者地址列表
Registry(注册中心):
- 采用Zookeeper作为推荐实现
- 负责服务地址的注册与发现
Monitor(监控中心):
- 收集并统计RPC调用指标
Container(服务容器):
- 通常使用Spring容器
- 负责初始化、管理和运行服务实例
Dubbo上手指南
配置方式详解
1. 注解方式配置
// 服务提供者
@Service(version = "1.0.0")
public class UserServiceImpl implements UserService {}
// 服务消费者
@Reference(version = "1.0.0")
private UserService userService;
2. XML方式配置
<!-- 提供者配置 -->
<dubbo:service interface="com.example.UserService" ref="userService" version="1.0.0"/>
<!-- 消费者配置 -->
<dubbo:reference id="userService" interface="com.example.UserService" version="1.0.0"/>
3. 代码方式配置
// 服务提供者配置
ServiceConfig<UserService> service = new ServiceConfig<>();
service.setInterface(UserService.class);
service.setRef(new UserServiceImpl());
service.setVersion("1.0.0");
service.export();
// 服务消费者配置
ReferenceConfig<UserService> reference = new ReferenceConfig<>();
reference.setInterface(UserService.class);
reference.setVersion("1.0.0");
UserService userService = reference.get();
项目结构规划
推荐采用Maven多模块项目结构:
parent-project
├── api-module // 接口定义
├── provider-module // 服务实现
└── consumer-module // 服务调用