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

相关新闻

C#经典编程100道——流程控制(持续更新中)

C#经典编程100道——流程控制(持续更新中)

顺序结构选择结构if结构使用goto 允许玩5次 猜打了或者猜小了 猜对了 对应的提示 , 不合法输入的提示 不在1-100的提示Random rnd new(); int randomNumber rnd.Next(1, 101); int count 0; Console.WriteLine("欢迎来到猜字游戏,允许玩家玩5次…

2026/9/26 8:05:09 阅读更多 →
VMware安装CentOS 7.9完整实战指南

VMware安装CentOS 7.9完整实战指南

1. 为什么现在还要手把手教VMware装Linux?这事儿没你想得那么简单 我带过三届高校Linux实训课,也给二十多家中小企业的运维团队做过虚拟化环境搭建培训。每次开课前问学员:“谁在VMware里成功装过CentOS?”举手的不到三分之一&…

2026/9/26 8:05:09 阅读更多 →
Apex Amp 高级用法实战:梯度裁剪、多模型/多优化器/多损失训练与自定义数据批处理

Apex Amp 高级用法实战:梯度裁剪、多模型/多优化器/多损失训练与自定义数据批处理

人工智能大模型音乐生成音频预训练 【免费下载链接】jukebox Code for the paper "Jukebox: A Generative Model for Music" 项目地址: https://gitcode.com/gh_mirrors/ju/jukebox 点击查看 免费下载 本文以 advanced.rst 为主线,系统讲解 A…

2026/9/26 8:05:09 阅读更多 →

最新新闻

MySQL 5.7.22 生产部署指南:兼容性、安全初始化与 systemd 管理

MySQL 5.7.22 生产部署指南:兼容性、安全初始化与 systemd 管理

简介:本资源为MySQL 5.7.22官方Windows 32位安装包(mysql-5.7.22-win32),面向数据库初学者、运维人员及中小型项目开发者,用于快速部署稳定可靠的开源关系型数据库环境。压缩包共365个文件,含83个动态链接库…

2026/9/26 8:49:35 阅读更多 →
开源代码评审工作流:CLI+Agent+Git Diff三位一体架构

开源代码评审工作流:CLI+Agent+Git Diff三位一体架构

1. 项目概述:这不是一个“工具”,而是一套可落地的开源代码评审工作流“open-code-review”这个名称乍看像某个 GitHub 仓库名,但实际它代表的是一种正在快速演进的工程实践范式——把传统意义上依赖人工、会议、PR评论框完成的代码评审&…

2026/9/26 8:49:35 阅读更多 →
RoboCup 2D agent2d-3.1.1核心机制解析:Role、Bhv与WorldModel协同原理

RoboCup 2D agent2d-3.1.1核心机制解析:Role、Bhv与WorldModel协同原理

简介:本资源是一份面向RoboCup 2D机器人足球竞赛开发者的代码解析文档,专为初学者与进阶开发者梳理核心智能体行为逻辑与系统架构。文档深入拆解了bhv行为动作(如基础跑位、进攻踢球、守门员扑救等14类动作)、role球员角色&#x…

2026/9/26 8:49:35 阅读更多 →
Open-Code-Review:可审计的AI代码审查范式

Open-Code-Review:可审计的AI代码审查范式

1. “Open-Code-Review”不是新工具,而是一套可落地的开源协作范式 你可能在 GitHub Trending 或 Hugging Face 的 Weekly Report 里见过这个词——它不像 pre-commit 那样有明确的 CLI 命令,也不像 SonarQube 那样自带 Web 控制台。它没有官方仓库、…

2026/9/26 8:49:35 阅读更多 →
A2A协议全解析:AI Agent互操作标准、MCP关系与从0到1实践

A2A协议全解析:AI Agent互操作标准、MCP关系与从0到1实践

在 Agent 开发圈子里混久了,你会发现一个很魔幻的现实:单个 Agent 的能力越来越强,但把两个不同团队做的 Agent 放在一起,它们根本没法好好说话。这不光是接口格式不统一的问题,连“你帮我干件事”“干完了&#xff0c…

2026/9/26 8:49:35 阅读更多 →
ChatGPT-Shortcut「我的收藏」完全指南:标签分类、拖拽排序与跨设备同步的提示词库管理

ChatGPT-Shortcut「我的收藏」完全指南:标签分类、拖拽排序与跨设备同步的提示词库管理

AI 应用提示工程人工智能前端 【免费下载链接】ChatGPT-Shortcut Stop writing prompts from scratch — a searchable prompt library for ChatGPT, Claude, Gemini and Cursor Русский 한국어 العربية हिन्दी ไทย | 别再从头写提示词&…

2026/9/26 8:48:35 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →