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

第三篇:从零搭建 Spring Boot 3 + Dubbo 3 + ZooKeeper 微服务实战 -- 消费者 模块

创建 dubbo-consumer 模块服务消费者Consumer 通过 ZooKeeper 发现 Provider发起 RPC 调用并通过 REST 接口将结果暴露给前端或外部系统。5.1pom.xml与 Provider 模块的依赖基本一致。dubbo-consumer/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-consumer/artifactId namedubbo-consumer/name descriptionDubbo 服务消费者 — 通过 REST 接口演示 RPC 调用、版本路由和负载均衡/description ​ dependencies !-- 本项目 API -- dependency groupIdcom.example/groupId artifactIddubbo-api/artifactId /dependency ​ !-- Spring Boot Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency ​ !-- Dubbo Spring Boot Starter -- dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-spring-boot-starter/artifactId /dependency ​ !-- Dubbo ZooKeeperCurator 5 -- dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-zookeeper-curator5-spring-boot-starter/artifactId /dependency /dependencies ​ build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build ​ /project5.2application.ymldubbo-consumer/src/main/resources/application.yml# # Dubbo Consumer 配置 # ​ server: port: 8082 ​ spring: application: name: dubbo-consumer ​ # --- Dubbo 配置 --- dubbo: application: name: dubbo-consumer serialize-check-status: WARN protocol: name: dubbo port: -1 # consumer 不暴露 Dubbo 端口设为 -1 registry: # ⚠️ 修改为你的 ZooKeeper 地址 address: zookeeper://192.168.0.100:2181 timeout: 10000 consumer: timeout: 5000 retries: 2 check: false # 启动时不检查 provider 是否就绪方便调试 ​ # 日志级别 logging: level: org.apache.dubbo: INFO com.example.dubbo: DEBUG与 Provider 配置的关键区别dubbo.protocol.port: -1Consumer 不需要暴露 Dubbo 端口它只调用别人不被别人调用设为-1表示不监听。dubbo.consumer.check: false启动时不强制检查 Provider 是否在线。设为false后即使 Provider 还没启动Consumer 也能正常启动调用时再去发现服务。这在开发调试时很方便。5.3启动类dubbo-consumer/src/main/java/com/example/dubbo/consumer/ConsumerApplication.javapackage com.example.dubbo.consumer; ​ import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; ​ /** * Dubbo Consumer 启动类。 */ SpringBootApplication EnableDubbo public class ConsumerApplication { ​ public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); System.out.println( Dubbo Consumer 启动成功 ); } }5.4 UserControllerREST 接口 RPC 调用这是本项目最核心的消费端代码演示了如何通过DubboReference注入远程服务并调用。dubbo-consumer/src/main/java/com/example/dubbo/consumer/controller/UserController.javapackage com.example.dubbo.consumer.controller; ​ import com.example.dubbo.api.UserService; import com.example.dubbo.api.model.User; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; ​ /** * REST 控制器 — 演示如何通过 DubboReference 消费远程服务。 * * version 引入哪个版本的 UserService ,引用任意版本version* * * loadbalance(Provider 提供者 有多个机器时决定调哪台机器) 采用的负载均衡算法 * 策略名 说明 适用场景 * random 随机默认 机器性能均衡请求量均匀 * roundrobin 轮询 需要均匀分配请求 * leastactive 最少活跃调用数 处理耗时差异大的场景 * consistenthash 一致性哈希 需要相同参数落到同一台机器 * shortestresponse 最短响应时间 机器性能差异大优先调快的 */ RestController RequestMapping(/user) public class UserController { DubboReference(version 1.0, loadbalance roundrobin) private UserService userServiceAny; /** * 连续调用 N 次返回每次的结果 * 便于观察请求在 v1/v2 之间的分布。 */ GetMapping(/lb-test) public MapString, Object loadBalanceTest(RequestParam(value times, defaultValue 10) int times) { MapString, Object result new HashMap(); int v1Count 0, v2Count 0; ​ for (int i 0; i times; i) { ListUser users userServiceAny.listAll(); if (users ! null users.size()4) { v2Count; } else { v1Count; } } ​ result.put(totalCalls, times); result.put(v1Count, v1Count); result.put(v2Count, v2Count); result.put(v1Percent, String.format(%.1f%%, v1Count * 100.0 / times)); result.put(v2Percent, String.format(%.1f%%, v2Count * 100.0 / times)); return result; } }DubboReference详解version 1.0精确引用 v1.0 版本的 UserService。如果改为version *则会随机路由到任意版本v1 或 v2用于演示通配路由。loadbalance roundrobinConsumer 端指定的负载均衡策略优先级高于 Provider 端的建议值。Dubbo 负载均衡策略速查表策略名说明适用场景random随机默认机器性能均衡roundrobin轮询均匀分配请求leastactive最少活跃调用数处理耗时差异大consistenthash一致性哈希相同参数落同一台机器shortestresponse最短响应时间机器性能差异大

相关文章:

第三篇:从零搭建 Spring Boot 3 + Dubbo 3 + ZooKeeper 微服务实战 -- 消费者 模块

创建 dubbo-consumer 模块&#xff08;服务消费者&#xff09;Consumer 通过 ZooKeeper 发现 Provider&#xff0c;发起 RPC 调用&#xff0c;并通过 REST 接口将结果暴露给前端或外部系统。5.1 pom.xml&#xff0c;与 Provider 模块的依赖基本一致。dubbo-consumer/pom.xml<…...

物联网面试必过要点

要是能熟记以下知识点&#xff0c;再加上自身的项目经验&#xff0c;过个面试&#xff0c;问题不大。指针定义一个指向指针的的指针&#xff0c;它指向的指针是指向一个整型数 int **a; 一个有10个指针的数组&#xff0c;该指针是指向一个整型数的 int *a[10]; 一个指向有10个整…...

完整博文目录

Java 集合 JDK 常用集合类源码阅读 &#x1f31f; 并发 JUC 并发包源码阅读 &#x1f31f;ThreadPoolExecutor 与常用线程池volatile, synchronized 和锁 基础扩展 String 字符串浅析反射机制异常机制 数据库 HBase HBase原理 &#x1f31f; MySQL 事务&#xff0c;隔离…...

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

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

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

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

文章代码地址

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Lumibot核心功能揭秘&#xff1a;股票、期权、期货一站式交易解决方案 【免费下载链接】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&#xff1a;轻量级 JavaScript 库操作系统完整指南 【免费下载链接】runtime [not maintained] Lightweight JavaScript library operating system for the cloud 项目地址: https://gitcode.com/gh_mirrors/runt/runtime runtimejs 是一个轻量级…...

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

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

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

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

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

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

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

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

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

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

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

终极Android WebView缓存解决方案&#xff1a;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&#xff1a;简单高效的域密码喷洒工具完全指南 【免费下载链接】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深度整合&#xff1a;打造自定义分形着色器的终极指南 【免费下载链接】PySpace GLSL Fractal Ray Marcher in Python 项目地址: https://gitcode.com/gh_mirrors/py/PySpace PySpace是一个强大的Python项目&#xff0c;它将GLSL&#xff08;OpenGL着色语言…...

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

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

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

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

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

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

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

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

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

如何使用BlindAI构建安全的隐私增强AI解决方案&#xff1a;完整指南 【免费下载链接】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;而完全隐藏专业性又将削弱职业价值。这一矛盾催生了“濒危程序…...