温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java dubbo怎么实现远程调用

发布时间:2026-11-03 15:40:40 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 Java 里,Dubbo 本身就是一个 RPC(远程过程调用)框架,它的核心作用就是:
像调用本地方法一样调用远程服务。

下面我从 整体原理 → 最小可运行示例 → 关键配置点 三个层面讲清楚。


一、Dubbo 远程调用的核心原理(先建立认知)

Dubbo 远程调用大致流程:

Consumer(消费者)
   ↓ 调用接口方法(像本地一样)
Dubbo Proxy
   ↓ 序列化 + 网络传输
Provider(提供者)
   ↓ 反序列化 + 执行业务逻辑
返回结果

核心角色:

  • Interface(接口):消费者和提供者都依赖
  • Provider(服务提供者):实现接口并注册
  • Consumer(服务消费者):引用接口并调用
  • Registry(注册中心):如 Zookeeper / Nacos
  • Protocol(协议):默认 dubbo 协议

二、最小可运行的 Dubbo 远程调用示例

以 Spring Boot + Dubbo + Zookeeper 为例(最常见)


1️⃣ 公共接口模块(api)

public interface UserService {
    String sayHello(String name);
}

2️⃣ Provider(服务提供者)

依赖

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-registry-zookeeper</artifactId>
</dependency>

实现接口

@DubboService
public class UserServiceImpl implements UserService {
    @Override
    public String sayHello(String name) {
        return "Hello " + name;
    }
}

配置文件

dubbo:
  application:
    name: user-provider
  registry:
    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo
    port: 20880

启动类

@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

3️⃣ Consumer(服务消费者)

引用远程服务

@RestController
public class UserController {

    @DubboReference
    private UserService userService;

    @GetMapping("/hello")
    public String hello() {
        return userService.sayHello("Dubbo");
    }
}

配置

dubbo:
  application:
    name: user-consumer
  registry:
    address: zookeeper://127.0.0.1:2181

4️⃣ 启动顺序

  1. 启动 Zookeeper
  2. 启动 Provider
  3. 启动 Consumer
  4. 访问接口 → 远程调用成功

三、Dubbo 远程调用的关键机制

✅ 1. 接口契约(最重要)

  • Provider 和 Consumer 必须共享同一个接口
  • 实现类只在 Provider 端

✅ 2. 注册中心作用

  • Provider 注册服务地址
  • Consumer 拉取服务列表
  • 实现 服务发现

✅ 3. 代理机制

  • Consumer 调用的是 Dubbo 动态代理对象
  • 真实调用发生在远程

✅ 4. 序列化

  • 默认使用 Hessian2
  • 参数和返回值必须 可序列化

四、不使用注册中心(直连方式)

@DubboReference(url = "dubbo://127.0.0.1:20880")
private UserService userService;

适合调试、测试,不推荐生产


五、一句话总结

Dubbo 实现远程调用 = 接口共享 + 服务提供者暴露 + 注册中心 + 消费者引用 + 动态代理

如果你愿意,我可以:

  • 给你画一张 Dubbo 调用时序图
  • 讲 Dubbo 和 Spring Cloud OpenFeign 的区别
  • 或帮你 手写一个极简 RPC 理解原理

你想继续哪一块?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手