Spring Boot如何集成Zookeeper(Spring Cloud Zookeeper方案)

发布时间:2026/9/26 8:04:51

Spring Boot如何集成Zookeeper(Spring Cloud Zookeeper方案) 前面的文章介绍了Zookeeper: windows下Zookeeper的介绍、下载、安装这篇文章介绍一下Spring Boot如何集成Zookeeper。注意Zookeeper本身没有调用能力只负责服务发现和服务注册本教程借用了RestTemplate实现HTTP调用来验证Zookeeper的服务调用能力 1. 集成方案常见的Spring Boot集成Zookeeper有两种方案方案说明适用场景Spring CloudSpring Cloud 生态的子项目封装了服务发现、配置管理等能力微服务架构需要快速实现服务注册与发现原生 Apache CuratorZooKeeper 官方推荐的 Java 客户端提供更底层的 API需要分布式锁、Leader 选举、精细控制 ZooKeeper 节点本文选的是Spring Cloud ZooKeeper 因为它与 Spring Boot 无缝集成代码量最少。2.环境介绍IDEA :2026.1JDK17maven:3.9.xzookeeper:3.9.5spring boot:3.2.5先启动Zookeeper默认端口号是2181本文项目结构如下zk-demo/ ├── pom.xml ├── zk-demo-provider/ │ ├── pom.xml │ └── src/main/java/com/guo/provider/ │ ├── ProviderApplication.java │ └── controller/ProviderController.java └── zk-demo-consumer/ ├── pom.xml └── src/main/java/com/guo/consumer/ ├── ConsumerApplication.java ├── controller/ConsumerController.java └── config/RestTemplateConfig.java2.创建父工程打开IDEA左上角点击 “文件”—“新建”—“项目”这里左侧选择“Java”名称填 “zk-demo”,构建系统选“Maven”这里JDK选17然后点击”创建“创建项目后界面如下然后右击”src“然后点击”删除“ 父工程没有代码只管配置然后打开父工程的依赖填写下面的依赖参考后面的代码然后刷新一下添加依赖。注意上图中的spring boot版本已经改成3.2.5 此处不能使用高版本的Spring Bootpom文件的依赖内容参考如下?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.guo/groupIdartifactIdzk-demo/artifactIdversion1.0-SNAPSHOT/versionpackagingpom/packagingparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.5/versionrelativePath//parentpropertiesjava.version17/java.versionspring-cloud.version2023.0.0/spring-cloud.version/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-zookeeper-discovery/artifactId/dependency/dependencies/project注意只定版本不实际引入。子模块需要自己写依赖可省略版本。实际引入子模块会自动继承无需再写。3.生产者模块3.1 创建生产者模块右击 项目名称点击”新建“然后点击 ”模块“。模块这里左侧选”Java“,然后构建系统选 MavenJDK选17然后点击 创建。下面这里是生产者的pom.xml文件的内容。3.2 编写配置文件右击生产者zk-demo-provide模块的 resources 文件夹点击”新建“然后点击”文件“文件名是application.yml配置文件内容参考如下spring:application:name:provider# 服务名将作为 ZooKeeper 中的节点名cloud:zookeeper:connect-string:localhost:2181# ZooKeeper 地址discovery:enabled:true# 是否启用服务注册register:true# 是否注册当前服务root:/services# 注册的根路径可选server:port:8081#项目的端口下面是配置文件截图的内容。3.3 新增项目结构右击生产者zk-demo-provider模块选择新建然后点击”软件包“软件包的名称为com.guo.provider创建完后项目结构如下3.4 主启动类右击生产者模块zk-demo-provider中的provider文件夹选择”新建“—“Java类”。启动类的名称为ProviderApplication启动类的参考代码如下packagecom.guo.provider;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;SpringBootApplicationEnableDiscoveryClient// 开启服务发现让应用能注册到 ZooKeeperpublicclassProviderApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ProviderApplication.class,args);}}创建完后项目代码和结构如下3.5 业务控制器(Controller)右击生产者中的provider文件夹选择”新建“—“软件包”软件包名称为com.guo.provider.controller创建完后项目结构如下然后右击刚才创建的controller文件夹点击”新建“—“Java类”Java类的名字为ProviderController参考代码如下packagecom.guo.provider.controller;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;RestControllerRequestMapping(/provider)publicclassProviderController{Value(${server.port})privateStringport;GetMapping(/info/{id})publicStringgetInfo(PathVariable(id)Integerid){returnProvider: received id id, response from port port;}}4.消费者模块4.1 创建消费者模块右击zk-demo项目选择 ”新建“ ,然后 选择 ”模块“模块名称和类型参考如下创建完后消费者的pom.xml文件参考如下4.2 编写配置文件右击消费者的resources文件夹选择”新建“然后选择”文件“文件名字为application.yml消费者模块的配置内容参考如下spring:application:name:consumercloud:zookeeper:connect-string:localhost:2181# 连接地址discovery:enabled:true# 是否开启服务注册register:true# 是否注册自己root:/services# 根节点server:port:8082#4.3 新增项目结构右击 消费者模块的java 文件夹选择”新建“—“软件包”软件包名称参考是com.guo.consumer创建完后项目结构如下4.4 主启动类右击刚才创建的consumer文件夹选择 ”新建“—“Java类”启动类名为ConsumerApplication启动类参考代码如下packagecom.guo.consumer;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;SpringBootApplicationEnableDiscoveryClientpublicclassConsumerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ConsumerApplication.class,args);}}4.5 配置RestTemplate(带负载均衡)RestTemplate 是 Spring 提供的同步 HTTP 客户端工具用于Java 程序中调用第三方 / 其他微服务的 HTTP 接口发送 GET、POST 等请求。右击 consumer文件夹选择”新建“—“软件包”软件包的名字为com.guo.consumer.config右击刚才创建的config文件夹选择”新建“——“Java类”这里的类名为RestTemplateConfig这里的参考的代码如下packagecom.guo.consumer.config;importorg.springframework.cloud.client.loadbalancer.LoadBalanced;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.client.RestTemplate;ConfigurationpublicclassRestTemplateConfig{BeanLoadBalanced// 使得 RestTemplate 能够使用服务名进行调用并自动负载均衡publicRestTemplaterestTemplate(){returnnewRestTemplate();}}4.6 调用控制器Controller先新建controller文件夹。右击 consumer文件夹中点击”新建“—“软件包”软件包名称为com.guo.consumer.controller然后右击controller文件夹选择”新建“—“Java类”这里的类名为ConsumerControllerConsumerController的参考代码如下packagecom.guo.consumer.controller;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importorg.springframework.web.client.RestTemplate;RestControllerRequestMapping(/consumer)publicclassConsumerController{AutowiredprivateRestTemplaterestTemplate;GetMapping(/call/{id})publicStringcallProvider(PathVariable(id)Integerid){// 使用服务名 provider而不是具体的 IP:端口Stringurlhttp://provider/provider/info/id;// 实际的 HTTP 请求由 RestTemplate 发出ZooKeeper 只负责将 provider 解析为具体地址returnrestTemplate.getForObject(url,String.class);}}5.测试先启动 生产者模块。再启动消费者模块然后打开浏览器访问下面的地址http://localhost:8082/consumer/call/123在浏览器中看懂下面的内容这表明 consumer 通过 ZooKeeper 获取了 provider 的地址然后使用 RestTemplate 发起了真正的 HTTP 调用。参考代码1百度网盘通过网盘分享的文件zookeeper-demo.zip链接: https://pan.baidu.com/s/1v-KSKsoArheqy3_aTSADqA?pwdfywi 提取码: fywi2夸克网盘我用夸克网盘给你分享了「zookeeper-demo.zip」点击链接或复制整段内容打开「夸克APP」即可获取。/6c283b5Ahm链接https://pan.quark.cn/s/6c87938d4e80?pwdLhW6提取码LhW6
延伸阅读

更多相关文章

2026/9/26 7:59:51

超声B-scan图像缺陷检测实战:Python预处理与UNet分割落地指南

简介:本资源是一套面向毕业设计、课程实训与工程实践的钢轨缺陷智能检测完整方案,聚焦铁路安全运维场景,解决传统人工巡检效率低、精度差等痛点。基于超声图像数据,采用YOLOv5深度学习模型实现裂纹、划痕、断裂等典型缺陷的自动识…

2026/9/26 7:59:51

一周AI动态怎么做?信息源筛选与周报写作实战指南

1. 一周AI动态到底在追踪什么每周打开行业群、技术社区和几个固定的信息源,把过去七天里真正值得留意的AI进展筛一遍、记下来、讲清楚——这就是“一周AI动态”这件事的全部。它不是什么高深的技术活,但绝对是个考验判断力和信息素养的细活。我做了快两年…

2026/9/26 7:59:51

CODESOFT如何更改语言

第一步打开CODESOFT,工具—配置第二步选项 - 显示 位置选择需要的语言,点确定,完成语言切换

2026/9/26 9:04:53

PDF防拷贝实战:权限控制原理与工具使用全解析

这几年跟PDF打交道多了,我最大的一个感触就是:很多人发出去的PDF,相当于把文件放在橱窗里供人免费取阅。你觉得自己做了个"不可编辑"的文档,结果对方一个截图、一次在线转换、一台虚拟打印机,几分钟就把里面…

2026/9/26 9:04:53

Atlas 300V跑YOLO从入门到调优:昇腾推理卡部署全解析

最近好几个做视觉的朋友都在问同一个问题:Atlas到底能不能跑YOLO?搭配热搜里那句"Atlas 300V 24G是运算加速卡吗",我意识到很多人其实连Atlas是啥、整个部署链路怎么搭都不太清楚,就先入为主地拿它跟NVIDIA显卡比了。我…

2026/9/26 9:04:53

MIPI LP TX低功耗发送模式:D-PHY时序原理与调试实战

MIPI LP TX 这个说法,第一次听到的人多半会愣一下——MIPI 我熟,CSI、DSI、DPHY 这些词天天见,但 LP TX 是什么?是某个新出的协议变种,还是某个芯片厂商的私有叫法?其实都不是。LP 是 Low-Power 的缩写&…

2026/9/26 9:04:53

LangChain4j不是LangChain的Java版,而是JVM原生LLM应用框架

1. LangChain4j不是LangChain的Java版,而是为Java生态重新设计的LLM应用架构很多人第一次看到LangChain4j,下意识会想:“哦,这是LangChain官方出的Java移植版”,然后直接去翻Python文档、照搬Chain构造逻辑、硬套Promp…

2026/9/26 9:04:53

【Python 系统入门付费专栏】第 12 讲 文件读写与编码处理:从底层字节到工程级最佳实践,掌握数据持久化核心

专栏导读:本专栏为 Python 从入门到算法落地系统付费专栏,共 5 大阶段 25 讲。本文为第三阶段第 2 讲,承接上一讲的模块与包体系,深入讲解 Python 文件 IO 与编码处理。文件操作是数据持久化、自动化办公、数据分析的核心基础,本文从文件操作的操作系统本质出发,逐层拆解…

2026/9/26 8:59:53

从数据到上线:AI项目完整开发工作流实战

有个今年刚毕业的同学来找我,说自己在学校复现过不少论文、也打过几场数据竞赛,但真到要独立负责一个AI项目时,心里完全没底:不知道第一步该干什么,不知道用什么工具记录实验,也不清楚模型训完怎么变成别人…

2026/9/25 21:00:17

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/25 20:59:52

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/26 0:04:28

画质修复APP怎么选?Wink影像修复能力与产品实力解析

现如今手机拍摄场景愈发丰富,演唱会直拍、漫展记录、老视频翻新、日常vlog录制,都会遇到画面模糊、噪点多、曝光失衡等问题,不少用户在挑选工具时比较在意一款画质修复APP能够兼顾修复效果与自然质感。Wink作为美图公司推出的全球化AI影像增强…

2026/9/26 0:04:28

超低能耗建筑K值要求能否满足?浙东铝业建筑型材解析

核心摘要浙东铝业的超低能耗系统门窗产品,资料显示保温性能可达 K≤1.4W/(㎡K),能够对应上海地区超低能耗住宅对门窗保温性能的应用需求。判断建筑是否满足超低能耗要求,不能只看铝型材本身,还需要结合玻璃、隔热条、密封系统、开…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/25 18:41:36

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑