基本介绍

Apache Dubbo 是一款高性能的 Java RPC (Remote Procedure Call) 框架,其前身是阿里巴巴于 2011 年开源的一个高性能、轻量级的分布式服务框架。2018 年 Dubbo 正式进入 Apache 孵化器,成为 Apache 顶级项目。

Dubbo 的核心特性包括:

  1. 高性能的网络通信:基于 Netty 实现高效的 NIO 通信
  2. 服务自动注册与发现:支持多种注册中心如 ZooKeeper、Nacos 等
  3. 负载均衡:提供多种负载均衡策略如随机、轮询、一致性哈希等
  4. 服务容错:支持失败重试、快速失败、故障转移等容错机制
  5. 服务治理:提供丰富的服务治理功能如服务降级、访问控制等

服务治理(SOA Governance)

服务治理是企业为了确保 SOA (Service-Oriented Architecture) 项目顺利完成而实施的一系列管理过程,主要包括以下方面:

  1. 最佳实践:如服务拆分原则、接口设计规范等
  2. 架构原则:如服务松耦合、服务自治等
  3. 治理规程:包括服务生命周期管理、变更管理等

核心角色

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  // 服务调用