Dubbo远程调用全过程
以服务A(消费者)远程调用服务B(提供者)为例,咱们一步步拆解Dubbo远程调用的核心知识点,让你彻底搞懂这个过程~
一、核心角色与关系
在Dubbo中,A和B的关系是消费者(Consumer) 与提供者(Provider):
- 服务B(提供者):暴露业务接口(比如
UserService),等待被调用。 - 服务A(消费者):需要调用B的接口来完成自身业务(比如A的订单服务需要调用B的支付服务)。
光有A和B还不够,Dubbo还需要3个核心组件协调它们:
- 注册中心(Registry):类似“通讯录”,B启动时会把自己的地址(IP:端口)注册到这里,A启动时会从这里订阅B的地址。
- 协议(Protocol):A和B之间的“语言”,规定了数据如何传输(比如Dubbo协议、HTTP协议)。
- 序列化器(Serializer):把Java对象转成二进制数据(方便网络传输),B收到后再转回来。
二、远程调用完整流程(A→B)
咱们以“A调用B的 getUser(String userId) 方法”为例,拆解全过程:
1. 服务注册(B→注册中心)
- B启动时,会通过Dubbo的
@Service注解(或XML配置)暴露接口,比如:// 服务B的实现类 @Service(interfaceClass = UserService.class, version = "1.0.0") public class UserServiceImpl implements UserService { @Override public User getUser(String userId) { return new User(userId, "张三"); } } - B会将接口信息(接口名、版本、IP:端口)注册到注册中心(比如ZooKeeper),注册中心会记录:
UserService:1.0.0 → [192.168.1.100:20880](假设B的地址是这个)。
2. 服务订阅(A→注册中心)
- A启动时,通过
@Reference注解引用B的接口:// 服务A的代码 public class OrderService { // 引用B的服务 @Reference(interfaceClass = UserService.class

最低0.47元/天 解锁文章
3538

被折叠的 条评论
为什么被折叠?



