Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

  • SpringCloud

  • MySQL

  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

    • dubbo没有服务端吗
    • 两个独立的springboot项目可以用dubbo吗,不是spring cloud
      • 和http调用的区别
      • ​​Dubbo和SpringCloud适用场景
    • Kafka

    • 数据结构

    • 算法

    • OJ

    • 从道家哲学看计算机?
    • 后端
    • Dubbo
    plantre
    2025-06-24
    目录

    两个独立的springboot项目可以用dubbo吗,不是spring cloud

    是的,两个独立的 Spring Boot 项目完全可以通过 Dubbo 实现分布式服务调用,无需依赖 Spring Cloud。Dubbo 作为高性能的 RPC 框架,天然支持跨项目的服务暴露与消费,且与 Spring Boot 集成非常简便。以下是具体实现方式和关键步骤:


    # 🔧 1. 依赖配置

    两个项目均需引入 Dubbo 和注册中心(如 Zookeeper)的依赖:

    <!-- Dubbo Starter -->
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version> <!-- 需与Spring Boot版本匹配 -->
    </dependency>
    <!-- Zookeeper 客户端 -->
    <dependency>
        <groupId>com.101tec</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.2</version>
    </dependency>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    注:Dubbo 与 Spring Boot 版本需兼容(如 Spring Boot 2.0.x 对应 Dubbo Starter 0.2.x)。


    # 🛠️ 2. 服务提供方(Provider)配置

    项目 A(暴露服务)需完成以下步骤:

    1. 定义接口:在独立模块(如 api 模块)声明服务接口,供双方共享:
      public interface UserService {
          User getUser(Long id);
      }
      
      1
      2
      3
    2. 实现接口:在 Provider 项目中实现接口,并用 Dubbo 的 @Service 注解暴露服务:
      import org.apache.dubbo.config.annotation.Service;
      @Service // Dubbo 注解,非 Spring 的 @Service
      public class UserServiceImpl implements UserService {
          @Override
          public User getUser(Long id) {
              return new User(id, "Tom");
          }
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
    3. 配置注册中心与协议(application.properties):
      # 应用名称
      dubbo.application.name=provider-app
      # 注册中心地址
      dubbo.registry.address=zookeeper://127.0.0.1:2181
      # 协议与端口
      dubbo.protocol.name=dubbo
      dubbo.protocol.port=20880
      # 扫描 Dubbo 服务包路径
      dubbo.scan.base-packages=com.example.provider.service
      
      1
      2
      3
      4
      5
      6
      7
      8
      9

    关键点:dubbo.protocol.port 需唯一,避免端口冲突。


    # 🔍 3. 服务消费方(Consumer)配置

    项目 B(调用服务)需完成:

    1. 引用共享接口:引入包含接口定义的 api 模块。
    2. 通过 @Reference 注入服务:
      import org.apache.dubbo.config.annotation.Reference;
      @RestController
      public class UserController {
          @Reference // Dubbo 注解,注入远程服务
          private UserService userService;
          
          @GetMapping("/user/{id}")
          public User getUser(@PathVariable Long id) {
              return userService.getUser(id);
          }
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
    3. 配置注册中心(application.properties):
      dubbo.application.name=consumer-app
      dubbo.registry.address=zookeeper://127.0.0.1:2181
      
      1
      2

    注:消费者无需配置协议端口(dubbo.protocol.port),因其不暴露服务。


    # ⚙️ 4. 注册中心的作用

    Dubbo 依赖 注册中心(如 Zookeeper) 实现服务发现:

    • 服务提供者启动时:向注册中心注册服务地址(如 192.168.0.1:20880)。
    • 服务消费者调用时:从注册中心获取可用地址,并通过负载均衡策略(如随机、轮询)选择目标服务。

    # ⚠️ 5. 注意事项

    1. 接口包路径一致性
      提供者与消费者的接口全限定名(含包名)必须完全一致,否则无法匹配。
    2. 版本管理
      若接口迭代,可通过 @Service(version="1.0.0") 和 @Reference(version="1.0.0") 明确版本。
    3. 直连模式(测试用)
      绕过注册中心,消费者直连提供者(配置 @Reference(url="dubbo://localhost:20880"))。

    # 🌰 6. 项目结构示例

    ├── dubbo-api         // 公共模块(存放接口和DTO)
    │   └── UserService.java
    ├── dubbo-provider    // 服务提供方(Spring Boot 项目A)
    │   ├── UserServiceImpl.java
    │   └── application.properties
    └── dubbo-consumer    // 服务消费方(Spring Boot 项目B)
        ├── UserController.java
        └── application.properties
    
    1
    2
    3
    4
    5
    6
    7
    8

    # 💎 总结

    两个独立的 Spring Boot 项目完全可以通过 Dubbo + 注册中心(如 Zookeeper) 实现服务调用。核心流程包括:

    1. 提供方用 @Service 暴露服务并配置端口;
    2. 消费方用 @Reference 注入接口并连接注册中心;
    3. 双方依赖共享的 API 接口模块。
      Dubbo 的轻量化、高性能特性使其成为替代 Spring Cloud 的分布式调用优选方案,尤其适合模块拆分明晰的场景。
    编辑 (opens new window)
    上次更新: 2025/06/24, 00:41:57
    dubbo没有服务端吗
    和http调用的区别

    ← dubbo没有服务端吗 和http调用的区别→

    最近更新
    01
    集成loki
    07-04
    02
    TCP的ESTABLISHED是什么意思
    06-24
    03
    安装1panel
    06-24
    更多文章>
    Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式