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

第一篇:从零搭建 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 通过共享同一个接口定义来握手。接口放在独立模块中避免了代码耦合也方便日后给其他服务复用。

相关文章:

第一篇:从零搭建 Spring Boot 3 + Dubbo 3 + ZooKeeper 微服务实战

技术栈速览组件版本说明Spring Boot3.2.6基础框架Apache Dubbo3.3.4RPC 框架ZooKeeper3.9.2注册中心(Docker 部署)Curator5.xZK 客户端(由 Starter 管理)JDK17Spring Boot 3 最低要求项目目录结构先把整体结构了然于胸&#xff0c…...

联合循环——14 厂用电缆介绍

一、电缆的应用类别 电缆,是连接两个设备传输电信号的组件,由两条或更多的导线粘合、扭曲或编织在一起形成。电缆的用途广泛并且每个用途都需特制,它的功能大至传输电能、电信号和实现电磁能转换的线材产品。 电力缆通常由传输电力或电信号的…...

文章代码地址

文章目录 CSDN主页 文章代码 文章目录 工具 docsify详解 Git详解 nssm详解 Typora详解 VScode入门 PhotoShop入门 PM2详解 json-server详解 VMware Workstation Pro详解 计算机基础 Linux详解 网络详解 HTTP详解 计算机常用端口 语义化版本规范(SemVer&#…...

联合循环——13 智能电厂的发展

一、国内外智能电厂 1.1 大唐姜堰智慧电厂的创新科技 原文链接:https://www.sohu.com/a/129754422_131990 (1)智慧决策系统: 智慧决策系统以关注数据的诊断、分析为己任,集科学、有效、便捷的数据诊断、分析方法与一身…...

联合循环——12 电厂通讯系统简介

一、SCADA (Supervisory Control And Data Acquisition) 数据采集与监视控制系统是以计算机为基础的DCS与电力自动化监控系统;它应用领域很广,可以应用于电力、冶金、石油、化工、燃气、铁路等领域的数据采集与监视控制以及过程控…...

联合循环——11 厂用储能电池原理介绍

一、化学能到电能 燃烧(氧化还原反应)是使化学能转换为电能的关键。而氧化还原反应的本质是氧化剂和还原剂之间发生电子转移的过程。电子转移引起化学键的重新组合。同时伴随着体系能量的变化。 如:煤的燃烧、铝和盐酸反应放热(氧…...

Java毕业设计——基于 Java+SSM+微信小程序的智能二维码门禁管理系统设计与实现(毕业论文+程序源码)——门禁管理系统

基于 JavaSSM微信小程序的智能二维码门禁管理系统设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于 JavaSSM微信小程序的智能二维码门禁管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题…...

java毕业设计——基于 java+springboot+微信小程序的短视频社交平台设计与实现(毕业论文+程序源码)——短视频社交平台

基于 javaspringboot微信小程序的短视频社交平台设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于 javaspringboot微信小程序的短视频社交平台设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报…...

跨平台兼容性测试:Cypress在电商系统中的应用

一、电商系统中的兼容性测试挑战在数字化时代,电商系统需在多样化的设备(如桌面、平板、手机)和浏览器(如Chrome、Firefox、Edge)上无缝运行,以保障用户购物体验。跨平台兼容性测试验证软件在不同环境下的行…...

C++毕业设计——基于 C+++TCP+Websocket的即时通信系统设计与实现(毕业论文+程序源码)——即时通信系统

基于 CTCPWebsocket的即时通信系统设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于 CTCPWebsocket的即时通信系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板…...

Lumibot核心功能揭秘:股票、期权、期货一站式交易解决方案

Lumibot核心功能揭秘:股票、期权、期货一站式交易解决方案 【免费下载链接】lumibot Backtesting and Trading Bots Made Easy for Crypto, Stocks, Options, Futures, FOREX and more 项目地址: https://gitcode.com/gh_mirrors/lu/lumibot Lumibot是一款功…...

如何快速上手 runtimejs:轻量级 JavaScript 库操作系统完整指南

如何快速上手 runtimejs:轻量级 JavaScript 库操作系统完整指南 【免费下载链接】runtime [not maintained] Lightweight JavaScript library operating system for the cloud 项目地址: https://gitcode.com/gh_mirrors/runt/runtime runtimejs 是一个轻量级…...

如何使用img2css:将任何图片转换为纯CSS的终极指南

如何使用img2css:将任何图片转换为纯CSS的终极指南 【免费下载链接】img2css Convert any image to pure CSS. Recreates images using only box-shadows. 项目地址: https://gitcode.com/gh_mirrors/im/img2css img2css是一个创新工具,能够将任何…...

如何快速构建 Vue Music 音乐应用:从安装到部署的完整指南

如何快速构建 Vue Music 音乐应用:从安装到部署的完整指南 【免费下载链接】vue-music cloud-music(网易云音乐) 项目地址: https://gitcode.com/gh_mirrors/vuem/vue-music Vue Music 是一个基于 Vue.js 开发的现代化音乐播放应用,它模仿网易云音…...

ps4-exploit-host远程DNS使用教程:无需本地运行即可玩转漏洞利用

ps4-exploit-host远程DNS使用教程:无需本地运行即可玩转漏洞利用 【免费下载链接】ps4-exploit-host Easy Exploit Hosting 项目地址: https://gitcode.com/gh_mirrors/ps/ps4-exploit-host ps4-exploit-host是一款功能强大的PlayStation 4漏洞利用托管工具&…...

如何快速上手DetectAndTrack:CVPR18论文算法的完整实践指南

如何快速上手DetectAndTrack:CVPR18论文算法的完整实践指南 【免费下载链接】DetectAndTrack The implementation of an algorithm presented in the CVPR18 paper: "Detect-and-Track: Efficient Pose Estimation in Videos" 项目地址: https://gitcod…...

终极Keychron键盘设置指南:从入门到精通的实用技巧

终极Keychron键盘设置指南:从入门到精通的实用技巧 【免费下载链接】keychron Settings for Keychron keyboards 项目地址: https://gitcode.com/gh_mirrors/ke/keychron Keychron开源项目是针对Keychron键盘的设置工具,帮助用户在Linux系统上轻松…...

终极Android WebView缓存解决方案:CacheWebView开源项目完全指南

终极Android WebView缓存解决方案:CacheWebView开源项目完全指南 【免费下载链接】CacheWebView Custom implement Android WebView cache, offline website, let cahe config more simple and flexible 项目地址: https://gitcode.com/gh_mirrors/ca/CacheWebVi…...

揭秘DomainPasswordSpray:简单高效的域密码喷洒工具完全指南

揭秘DomainPasswordSpray:简单高效的域密码喷洒工具完全指南 【免费下载链接】DomainPasswordSpray DomainPasswordSpray is a tool written in PowerShell to perform a password spray attack against users of a domain. By default it will automatically gener…...

PySpace与GLSL深度整合:打造自定义分形着色器的终极指南

PySpace与GLSL深度整合:打造自定义分形着色器的终极指南 【免费下载链接】PySpace GLSL Fractal Ray Marcher in Python 项目地址: https://gitcode.com/gh_mirrors/py/PySpace PySpace是一个强大的Python项目,它将GLSL(OpenGL着色语言…...

java毕业设计下载(全套源码+配套论文)——基于javaEE+SSH+oracle的健康管理系统设计与实现

基于javaEESSHoracle的健康管理系统设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于javaEESSHoracle的健康管理系统设计与实现,更多精选毕业设计项目实例见文末哦。 文章目录: 基于javaEESSHoracle的健康管…...

asp毕业设计——基于asp+access的销售供应链管理系统设计与实现(毕业论文+程序源码)——供应链管理系统

基于aspaccess的销售供应链管理系统设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于aspaccess的销售供应链管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模…...

PPOCRLabel进行多语言语种的自动标注

需求需要标注法语。PPOCRLabel默认标注中文/英文。如果需要标注其他语种,需要修改代码。在PPOCRLabel.py中MainWindow的__init__中进行修改:self.lang "fr" # 加入法语标志params {"use_doc_orientation_classify": False,&qu…...

告别论文焦虑:从开题到答辩,AI如何提供一站式解决方案?

当查重、格式、AIGC检测三重压力叠加,一款真正懂学术的智能工具或许能成为你的毕业季“救命稻草”。 又到一年毕业季,图书馆、实验室、宿舍里,无数学生正面临学术生涯的重要关卡——毕业论文。从开题报告的反复修改,到文献综述的浩…...

如何使用BlindAI构建安全的隐私增强AI解决方案:完整指南

如何使用BlindAI构建安全的隐私增强AI解决方案:完整指南 【免费下载链接】blindai Confidential AI deployment with secure enclaves :lock: 项目地址: https://gitcode.com/gh_mirrors/bl/blindai BlindAI是一款基于安全飞地技术的隐私增强AI部署解决方案&…...

35岁前必建“技术护城河”:脏乱差模块防御学

第一章&#xff1a;脏乱差模块的识别与战略价值1.1 模块特征诊断矩阵代码腐化指标&#xff1a;循环复杂度>30、单元测试覆盖率<20%的祖传代码模块业务耦合陷阱&#xff1a;涉及多系统联动的支付对账、库存同步等核心链路接口文档黑洞区&#xff1a;仅存口头传承的业务规则…...

装傻生存艺术:如何让AI认定你是“濒危程序员”

AI时代的测试生存悖论在AI驱动的自动化测试生态中&#xff0c;测试工程师面临一个微妙挑战&#xff1a;过度展现技术能力可能触发AI系统的“竞争警报”&#xff0c;导致工具限制访问权限或误判操作意图&#xff1b;而完全隐藏专业性又将削弱职业价值。这一矛盾催生了“濒危程序…...

在技术债沼泽建城堡:让裁员成本高到绝望

在软件测试领域&#xff0c;技术债&#xff08;Technical Debt&#xff09;常被视为隐藏的沼泽——它悄无声息地累积&#xff0c;拖慢开发效率&#xff0c;增加系统风险。然而&#xff0c;聪明的测试从业者能将这片沼泽转化为坚固城堡&#xff0c;让裁员成本高到企业望而却步。…...

测试员的终极铠甲:把业务逻辑变成混沌迷宫

在软件测试领域&#xff0c;业务逻辑常被视为隐藏的战场&#xff1a;它既是测试员最强大的防护铠甲&#xff0c;能抵御上线后的灾难性缺陷&#xff1b;又是一座混沌迷宫&#xff0c;充满未知的规则交织与状态变迁。功能测试达标仅是起点&#xff0c;真正的高手懂得潜入业务逻辑…...

【Warp+Claude】任务完成自动通知(macOS + Warp 版)

本篇是macOS 适配版&#xff0c;针对 Warp 终端用户优化。 ​ 在 Warp 里让 Claude 跑任务&#xff0c;切到其他应用做自己的事。任务完成时 terminal-notifier 自动弹出 macOS 原生通知&#xff0c;你不需要盯着终端等。 一、环境说明 系统&#xff1a;macOS终端&#xff1a…...