10分钟快速掌握Dubbo核心概念,通过完整可运行的代码案例,带你在本地搭建第一个分布式服务!
一、Dubbo 是什么?
Apache Dubbo 是一款高性能Java RPC框架,提供三大核心能力:
- 服务透明调用:像调用本地方法一样调用远程服务
- 智能负载均衡:内置多种负载均衡策略
- 服务自动注册与发现:基于注册中心动态管理服务节点
二、核心角色图解
[服务提供者] --> 注册服务到 --> [注册中心]
[服务消费者] --> 从注册中心发现服务 --> [调用服务]
三、前置准备
- JDK 8+
- Maven 3.6+
- IDE(IntelliJ IDEA推荐)
- 注册中心(本文使用Nacos,也可使用Zookeeper)
四、快速开始(含完整代码)
1. 创建Maven父工程
xml
dubbo-api
dubbo-provider
dubbo-consumer
org.apache.dubbo
dubbo-bom
3.2.0
pom
import
2. 定义服务接口(API模块)
java
// UserService.java
public interface UserService {
String getUserInfo(Long userId);
}
3. 服务提供者实现
pom.xml添加:
xml
org.apache.dubbo
dubbo
com.alibaba.nacos
nacos-client
2.1.0
服务实现类:
java
// UserServiceImpl.java
@DubboService
public class UserServiceImpl implements UserService {
@Override
public String getUserInfo(Long userId) {
return "User_" + userId + ": {name: Tony, age: 30}";
}
}
启动类配置:
java
@EnableDubbo
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
4. 服务消费者调用
application.yml配置:
yaml
dubbo:
application:
name: dubbo-consumer
registry:
address: nacos://127.0.0.1:8848
consumer:
check: false
远程服务调用:
java
@RestController
public class UserController {
@DubboReference
private UserService userService;
@GetMapping("/user/{id}")
public String getUser(@PathVariable Long id) {
return userService.getUserInfo(id);
}
}
五、运行测试
- 启动Nacos服务器(默认端口8848)
- 启动ProviderApplication
- 启动ConsumerApplication
- 访问:http://localhost:8080/user/123
预期输出:
User_123: {name: Tony, age: 30}
六、进阶配置(按需使用)
1. 负载均衡策略
java
@DubboReference(loadbalance = "roundrobin")
private UserService userService;
2. 超时设置
yaml
dubbo:
consumer:
timeout: 3000 # 单位毫秒
3. 服务版本控制
java
@DubboService(version = "1.0.0")
@DubboReference(version = "1.0.0")
七、常见问题排查
- 服务未注册成功:检查Nacos控制台服务列表
- 找不到提供者:确认消费者和提供者使用相同的接口全限定名
- 调用超时:检查网络连通性,适当增加超时时间
动手实践后别忘记:
- 点击让更多开发者看到
- 转发到技术群帮助小伙伴
- 收藏备用,随时查阅
完整代码地址: [GitHub链接](评论区获取)
有任何问题欢迎留言讨论!下期预告:《Dubbo高级特性:流量灰度发布实战》
