当前位置: 首页 > news >正文

Dubbo + Spring Boot + Zookeeper 快速搭建分布式服务

Dubbo + Spring Boot + Zookeeper 快速搭建分布式服务

本文将详细介绍如何基于 Dubbo、Spring Boot 和 Zookeeper 快速搭建一个简单的分布式服务调用场景,包含服务提供者(Provider)、服务消费者(Consumer)及公共接口(API)的创建与配置,帮助开发者快速上手分布式服务开发。

1. 环境准备与项目结构设计

1.1 核心组件版本说明

  • Spring Boot:2.7.15(稳定版本,兼容性较好)
  • Dubbo:3.1.0(支持 Spring Boot 自动配置,简化开发)
  • Zookeeper:3.4.6(作为服务注册中心,需提前在本地安装并启动)

1.2 启动本地 Zookeeper

Zookeeper 是 Dubbo 默认的服务注册中心,需先确保本地 Zookeeper 正常运行:

  1. 下载 Zookeeper 并解压,进入 bin 目录

  2. 执行zkServer.cmd(Windows)启动服务

  3. 启动成功后,控制台会显示类似如下信息:
    在这里插入图片描述

1.3 创建父项目与子模块

使用 IDEA 或 Eclipse 创建一个 Spring Boot 父项目,然后在父项目下新建 3 个子模块,分别对应:

  • api:存放公共接口(服务契约),供 Provider 和 Consumer 依赖
  • provider:服务提供者,实现 api 模块的接口并暴露服务
  • consumer:服务消费者,调用 Provider 暴露的服务

项目结构如图所示:
在这里插入图片描述

2. 核心依赖配置

2.1 父项目依赖管理

在父项目的 pom.xml 添加依赖,供consumer和provider模块使用

 <groupId>com.example</groupId><artifactId>dubbo-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>consumer</module><module>provider</module><module>dubbo-api</module></modules><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.15</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.1.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-registry-zookeeper --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-zookeeper</artifactId><version>3.1.0</version></dependency></dependencies>

2.2 Provider 与 Consumer 依赖

providerconsumer 模块的 pom.xml 中添加api模块的依赖

    <dependencies><dependency><groupId>com.example</groupId><artifactId>dubbo-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>

3. 服务配置与启动

3.1 Provider 配置(服务提供者)

provider/src/main/resources/application.yml 中配置服务端口、Dubbo 应用名及注册中心地址:

server:port: 8081  # Provider 端口,避免与 Consumer 冲突dubbo:application:name: dubbo-demo-provider  # 应用名称,唯一标识registry:address: zookeeper://127.0.0.1:2181  # Zookeeper 注册中心地址

3.2 Consumer 配置(服务消费者)

consumer/src/main/resources/application.yml 中配置:

server:port: 8080  # Consumer 端口,与 Provider 区分dubbo:application:name: dubbo-demo-consumer  # 应用名称,唯一标识registry:address: zookeeper://127.0.0.1:2181  # 同 Provider 的注册中心地址

3.3 启动类配置

  • Provider 启动类:添加 @EnableDubbo 注解,开启 Dubbo 自动配置并扫描服务实现类

    @SpringBootApplication
    @EnableDubbo  // 关键注解:启用 Dubbo 服务注册与发现
    public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}
    }
    
  • Consumer 启动类:无需额外注解,直接启动即可

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

分别启动 Provider 和 Consumer 后,控制台显示启动成功:
在这里插入图片描述

4. 服务接口定义与实现

4.1 公共 API 接口(api 模块)

api 模块中定义服务接口(服务契约),作为 Provider 和 Consumer 的通信标准:

package com.example.api.service;/*** 公共服务接口*/
public interface HelloService {// 定义一个简单的远程调用方法String sayHello(String name);
}

4.2 Provider 实现服务接口

provider 模块中创建接口实现类,并通过 @DubboService 注解标记为 Dubbo 服务:

package com.example.provider.service.impl;import com.example.api.service.HelloService;
import org.apache.dubbo.config.annotation.DubboService;/*** 服务实现类:需实现 api 模块的接口*/
@DubboService  // 关键注解:声明为 Dubbo 服务提供者
public class HelloServiceImpl implements HelloService {@Overridepublic String sayHello(String name) {return "Hello:" + name + ",我是 Dubbo 服务提供者!";}
}

4.3 Consumer 调用远程服务

consumer 模块中创建控制器,通过 @DubboReference 注解注入远程服务接口并调用:

package com.example.consumer.controller;import com.example.api.service.HelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 消费者控制器:测试远程服务调用*/
@RestController
@RequestMapping("/consumer")
public class ConsumerController {// 关键注解:引用远程 Dubbo 服务@DubboReferenceprivate HelloService helloService;// 提供 HTTP 接口,用于测试远程调用@GetMapping("/testHello")public String testHello() {// 调用远程服务方法return helloService.sayHello("Dubbo 消费者");}
}

5. 验证服务调用

5.1 检查服务注册状态

通过 Zookeeper 客户端验证服务是否注册成功:

  1. 进入 Zookeeper 的 bin 目录,双击 zkCli.cmd 启动客户端

  2. 执行命令

    ls /services
    

    查看注册的服务,可看到

    ls /services/dubbo-demo-provider
    

    已注册:
    在这里插入图片描述

5.2 测试远程调用

启动 Provider 和 Consumer 后,通过浏览器或 Postman 访问 Consumer 的测试接口:

  • 请求地址:http://localhost:8080/consumer/testHello
  • 成功响应结果:Hello:Dubbo 消费者,我是 Dubbo 服务提供者!

调用成功界面如下:
在这里插入图片描述

6. 常见问题与解决方案

  1. 服务注册失败
    • 检查 Zookeeper 是否启动,地址是否正确(默认端口 2181)
    • Provider 启动类是否添加 @EnableDubbo 注解,确保服务被扫描
  2. 消费者找不到服务
    • 检查 Provider 和 Consumer 的 application.ymldubbo.registry.address 是否一致
    • 确认 API 接口的包路径在 Provider 和 Consumer 中完全相同(Dubbo 基于接口全类名匹配服务)
  3. 依赖冲突
    • 统一管理 Dubbo 和 Spring Boot 版本,避免不同模块依赖版本不一致

总结

通过本文的步骤,我们快速搭建了一个基于 Dubbo + Spring Boot + Zookeeper 的分布式服务调用场景,核心流程包括:

  1. 搭建 Zookeeper 注册中心
  2. 创建 Provider、Consumer 和 API 模块并配置依赖
  3. 定义服务接口并实现,通过注解暴露和引用服务
  4. 验证远程服务调用

Dubbo 作为高性能的 RPC 框架,结合 Spring Boot 的自动配置和 Zookeeper 的服务治理能力,可大幅简化分布式服务的开发与维护,适合中小型分布式系统快速落地。

http://www.dtcms.com/a/277100.html

相关文章:

  • spring--xml注入时bean的property属性
  • 20250713-`Seaborn.pairplot` 的使用注意事项
  • jenkins部署前端vue项目使用Docker+Jenkinsfile方式
  • 【PTA数据结构 | C语言版】字符串插入操作
  • java.net.InetAddress
  • 学习笔记-Excel统计分析——描述统计量的计算
  • SpringBoot单元测试类拿不到bean报空指针异常
  • 算法 - 蛇形矩阵-上三角
  • 2.3 单链表的应用
  • 图像读取与模型保存--基于NWPU-RESISC45数据集的图像二分类实战
  • stm32f103c8t6移植freeRTOS内存不足报错问题的解决办法
  • 浏览器渲染原理与性能优化全解析
  • 快速傅里叶变换(FFT)中的振幅和相位
  • 【计算机网络架构】环型架构简介
  • 在 C# 中调用 Python 脚本:实现跨语言功能集成
  • ADB 调试日志全攻略:如何开启与关闭 `ADB_TRACE` 日志
  • CS课程项目设计1:交互友好的井字棋游戏
  • 详解Linux下多进程与多线程通信(二)
  • 【QT】使用QSS进行界面美化
  • 异或为什么叫异或
  • 【读书笔记】《Effective Modern C++》第3章 Moving to Modern C++
  • Datawhale AI夏令营——基于带货视频评论的用户洞察挑战赛
  • 【PTA数据结构 | C语言版】简单计算器
  • 17.使用DenseNet网络进行Fashion-Mnist分类
  • LabVIEW调用外部DLL
  • 深度学习图像分类数据集—七种树叶识别分类
  • 零基础 “入坑” Java--- 十、继承
  • ARC 03 从Github Action job 到 runner pod
  • PPO(近端策略优化)
  • 华为HarmonyOS 5.0深度解析:跨设备算力池技术白皮书(2025全场景智慧中枢)