第一篇:从零搭建 Spring Boot 3 + Dubbo 3 + ZooKeeper 微服务实战
技术栈速览组件版本说明Spring Boot3.2.6基础框架Apache Dubbo3.3.4RPC 框架ZooKeeper3.9.2注册中心Docker 部署Curator5.xZK 客户端由 Starter 管理JDK17Spring Boot 3 最低要求项目目录结构先把整体结构了然于胸后面按模块逐一创建dubbo-demo/ ├── pom.xml # 父 POM版本统一管理 ├── dubbo-api/ # 共享接口模块 │ ├── pom.xml │ └── src/main/java/com/example/dubbo/api/ │ ├── UserService.java # 服务接口 │ └── model/User.java # 传输实体 ├── dubbo-provider/ # 服务提供者 │ ├── pom.xml │ └── src/main/ │ ├── java/com/example/dubbo/provider/ │ │ ├── ProviderApplication.java # 启动类 │ │ └── service/ │ │ ├── UserServiceV1Impl.java # v1.0 实现 │ │ └── UserServiceV2Impl.java # v2.0 实现 │ └── resources/application.yml # Provider 配置 └── dubbo-consumer/ # 服务消费者 ├── pom.xml └── src/main/ ├── java/com/example/dubbo/consumer/ │ ├── ConsumerApplication.java # 启动类 │ └── controller/ │ └── UserController.java # REST 接口 └── resources/application.yml # Consumer 配置第一步创建父工程创建项目根目录dubbo-demo在其中新建pom.xml。父 POM 的职责是统一管理子模块和依赖版本本身不包含任何代码。dubbo-demo/pom.xml?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.example/groupId artifactIddubbo-demo/artifactId version1.0.0/version packagingpom/packaging namedubbo-demo/name descriptionSpring Boot 3 Dubbo 3 ZooKeeper 示例项目/description modules moduledubbo-api/module moduledubbo-provider/module moduledubbo-consumer/module /modules properties java.version17/java.version maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding !-- 核心版本定义 -- spring-boot.version3.2.6/spring-boot.version dubbo.version3.3.4/dubbo.version /properties dependencyManagement dependencies !-- Spring Boot BOM -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-dependencies/artifactId version${spring-boot.version}/version typepom/type scopeimport/scope /dependency !-- Dubbo BOM -- dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-bom/artifactId version${dubbo.version}/version typepom/type scopeimport/scope /dependency !-- 本项目 API 模块 -- dependency groupIdcom.example/groupId artifactIddubbo-api/artifactId version${project.version}/version /dependency /dependencies /dependencyManagement build pluginManagement plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.11.0/version configuration source${java.version}/source target${java.version}/target !-- Spring Boot 3 必须保留方法参数名供 PathVariable/RequestParam 反射使用 -- parameterstrue/parameters /configuration /plugin plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId version${spring-boot.version}/version /plugin /plugins /pluginManagement /build /project要点解读packagingpom/packaging声明这是聚合工程不产出 JAR仅管理子模块。dependencyManagement通过导入 Spring Boot BOM 和 Dubbo BOM子模块引用依赖时无需写版本号全局统一。parameterstrue/parametersSpring Boot 3 中PathVariable、RequestParam等注解依赖编译时保留参数名必须开启此选项否则运行时会报参数绑定错误。第二步创建 dubbo-api 模块共享接口这是整个项目的契约模块Provider 和 Consumer 都要依赖它。它只定义接口和数据传输对象不包含任何业务实现。2.1 pom.xmldubbo-api/pom.xml?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdcom.example/groupId artifactIddubbo-demo/artifactId version1.0.0/version relativePath../pom.xml/relativePath /parent artifactIddubbo-api/artifactId namedubbo-api/name descriptionDubbo 服务接口定义模块 — 供 provider 和 consumer 共同依赖/description dependencies !-- 仅依赖 Lombok 用于实体类简化可选 -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency /dependencies /project2.2 User 实体类dubbo-api/src/main/java/com/example/dubbo/api/model/User.javapackage com.example.dubbo.api.model; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serial; import java.io.Serializable; /** * 用户实体 — 在 provider 和 consumer 之间传输的数据对象。 * 必须实现 Serializable因为 Dubbo RPC 需要序列化/反序列化。 */ Data AllArgsConstructor NoArgsConstructor public class User implements Serializable { Serial private static final long serialVersionUID 1L; private Long id; private String username; private String email; private Integer age; }关键知识点必须实现SerializableDubbo 默认使用 Hessian2 序列化传输对象必须可序列化否则 RPC 调用会抛异常。Serial注解JDK 14 引入的注解标记序列化相关字段是一种代码规范实践。DataLombok 注解自动生成 getter/setter/toString/equals/hashCode。AllArgsConstructorNoArgsConstructor生成全参和无参构造器无参构造器是反序列化的刚需。2.3 UserService 接口dubbo-api/src/main/java/com/example/dubbo/api/UserService.javapackage com.example.dubbo.api; import com.example.dubbo.api.model.User; import java.util.List; /** * 用户服务接口 — provider 实现consumer 调用。 * 该接口放在 dubbo-api 模块供两端共同依赖。 */ public interface UserService { /** * 查询所有用户 */ ListUser listAll(); }设计思想这就是Dubbo 的核心理念——面向接口编程。Provider 和 Consumer 通过共享同一个接口定义来握手。接口放在独立模块中避免了代码耦合也方便日后给其他服务复用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2416567.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!