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

Dubbo 核心知识点速记

一、工程结构为什么要拆三个模块整个项目拆成三个 Maven 子模块由一个父 POM 聚合管理dubbo-demo父工程packagingpom ├── dubbo-api → 接口契约层 ├── dubbo-provider → 服务提供者 └── dubbo-consumer → 服务消费者父工程的职责只有两件事统一管理子模块列表modules和统一锁定依赖版本dependencyManagement。它本身不产出任何 JARpackaging必须声明为pom。dubbo-api 独立成模块是 Dubbo 微服务的核心设计思想。接口定义和传输实体单独一个工程Provider 和 Consumer 都依赖它。这样做的好处是两端通过共享契约解耦Provider 的实现细节对 Consumer 完全不可见未来如果有新的消费方只要引入这个 API JAR 就能调用服务。二、三个核心注解整个 Dubbo 集成只需要记住三个注解EnableDubbo— 贴在启动类上。它是一切的开关作用是触发 Dubbo 的自动配置扫描当前包及子包下的 Dubbo 注解。Provider 和 Consumer 的启动类上都要加。没有它DubboService和DubboReference都不会生效。DubboService— 贴在Provider 端的接口实现类上。作用是告诉 Dubbo把这个类作为服务暴露出去注册到注册中心。它可以附带多个属性最常用的是version版本号和loadbalance负载均衡建议。一个接口可以有多个实现类通过不同的version区分。DubboReference— 贴在Consumer 端的字段上。作用是告诉 Dubbo帮我生成这个接口的远程代理从注册中心找到对应的 Provider 来调用。它是 RPC 调用的入口使用体验和注入一个本地 Bean 一样——字段声明后直接调方法底层的网络通信完全透明。容易混淆的点DubboService不是 Spring 的ServiceDubboReference也不是 Spring 的Autowired。它们是 Dubbo 自己的注解走的是 Dubbo 的注册发现机制不是 Spring 容器的 Bean 注入。三、版本路由同一接口多个实现共存Dubbo 允许同一个接口在 Provider 端注册多个版本。本项目中UserService同时有 v1.0 和 v2.0 两个实现Provider 端两个实现类分别用version 1.0和version 2.0标注Consumer 端通过DubboReference(version 1.0)精确指定调哪个版本如果 Consumer 端写version *则表示我不挑版本Dubbo 会在所有可用版本中做负载均衡。实际应用场景灰度发布。新版本上线时先部署一个 v2.0 的 Provider 实例让少量流量通过version *打过去观察效果确认无误后再全量切换。四、负载均衡策略当同一个服务有多个 Provider 实例时比如部署了 3 台机器Consumer 调用时需要决定请求发给谁。Dubbo 内置了五种策略random随机默认策略适合机器性能差不多的场景roundrobin轮询请求轮流分发保证绝对均匀leastactive最少活跃数哪台机器当前处理的请求最少就调哪台适合处理耗时差异大的场景consistenthash一致性哈希相同参数的请求始终落到同一台机器适合有缓存的场景shortestresponse最短响应时间优先调用响应最快的机器配置方式是在DubboService或DubboReference中设置loadbalance属性。五、配置优先级规则很重要Dubbo 中 Provider 和 Consumer 两端都可以配置timeout、retries、loadbalance等参数但它们的优先级是不同的Consumer 端配置 Provider 端配置 Dubbo 全局默认值也就是说Provider 端在DubboService上设的loadbalance random只是一个建议值。如果 Consumer 端在DubboReference上也设了loadbalance roundrobin最终以 Consumer 为准。设计意图是服务的提供方提供推荐配置但消费方可以根据自己的业务需求覆盖。比如某个消费方对延迟特别敏感它可以单独把timeout调短而不影响其他消费方。六、两个端口别搞混Provider 启动后实际监听了两个端口Spring Boot HTTP 端口如server.port: 8081处理 HTTP 请求比如 actuator 健康检查、REST 接口等Dubbo 协议端口如dubbo.protocol.port: 20880处理 RPC 调用Consumer 通过这个端口与 Provider 通信Consumer 端只需要 HTTP 端口对外暴露 REST 接口不需要 Dubbo 协议端口所以配置为port: -1。七、注册中心的角色ZooKeeper 在整个架构中充当的是服务电话簿Provider 启动时把自己的地址、接口名、版本号等信息写入 ZK 的节点上注册Consumer 启动时到 ZK 上查询自己需要的服务有哪些可用的 Provider 地址订阅运行时如果某个 Provider 下线ZK 会通知所有订阅者更新地址列表感知变化关键配置项dubbo.consumer.check: false的含义是Consumer 启动时不强制要求 Provider 已经就位。设为true默认值时如果找不到 ProviderConsumer 启动会直接报错。开发阶段建议设为false生产环境视情况而定。八、序列化的硬性要求Dubbo RPC 调用时参数和返回值需要经过序列化对象 → 字节流通过网络传输然后在对端反序列化字节流 → 对象。因此所有在接口中出现的实体类都必须实现Serializable接口并且最好显式声明serialVersionUID。如果忘了实现Serializable运行时调用会直接抛序列化异常。这也是为什么实体类放在 dubbo-api 模块的原因之一两端必须使用完全相同的类定义否则反序列化会失败。另外 Dubbo 3.3 引入了序列化安全检查机制serialize-check-status默认会校验反序列化的类是否在信任白名单中。开发阶段设为WARN只打日志不阻断生产环境建议配置信任列表。九、Maven BOM 的管理思路父 POM 通过dependencyManagement导入了两个 BOMBill of MaterialsSpring Boot BOM锁定所有 Spring 相关依赖的版本Dubbo BOM锁定所有 Dubbo 相关依赖的版本子模块引入依赖时不需要写version标签版本号由父 POM 统一管理。这种方式的好处是避免了版本冲突也方便日后统一升级——只需改父 POM 里的一个版本号。特别注意 ZooKeeper 客户端的选择ZK 3.8 要用dubbo-zookeeper-curator5-spring-boot-starterCurator 5不要用老的不带5的 Starter否则会有兼容性问题。十、Spring Boot 3 的特殊注意点Spring Boot 3 基于 Spring Framework 6 和 Jakarta EE 9有几个容易踩的坑JDK 最低要求 17不再支持 JDK 8/11编译器必须开启-parameters选项即maven-compiler-plugin配置parameterstrue/parameters否则RequestParam、PathVariable等注解在运行时无法解析参数名会报绑定错误包名从javax.*迁移到jakarta.*如果你在项目中直接用了 Servlet API 等需要注意 import 路径的变化十一、本地存根 (Stub) 和 本地伪装 (Mock)两者代码都是在消费者这边Stub 是为了**“优化”能不能不调能不能先查缓存它是主动**的拦截器。Mock是为了**“保命”提供者挂了怎么办降级使用它是被动**的备胎。DubboReference(version 1.0, loadbalance roundrobin, stub com.example.dubbo.consumer.stub.UserServiceStub, mock com.example.dubbo.consumer.mock.UserService_mock ) private UserService userServiceAny;速记口诀API 定契约两端都依赖 Service 贴提供Reference 贴消费 EnableDubbo 是开关启动类上不能忘 版本号控灰度星号通配全都上 负载均衡五策略Consumer 说了算 实体必须序列化不然传输全白搭。

相关文章:

Dubbo 核心知识点速记

一、工程结构:为什么要拆三个模块整个项目拆成三个 Maven 子模块,由一个父 POM 聚合管理:dubbo-demo(父工程,packagingpom) ├── dubbo-api → 接口契约层 ├── dubbo-provider → 服务提供者…...

第三篇:从零搭建 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;仅存口头传承的业务规则…...