Dubbo 学习笔记基于 3 台云服务器集群实战整理5 课文中 IP 均为示例已脱敏版本Dubbo 3.2.15Spring Boot 2.7.18Java 17文档目录docs/dubbo-学习笔记.md博客发布时拷贝docs/目录即可示例 IP 对照表节点公网 IPSSH 示例内网 IP典型角色Server 1203.0.113.1110.0.1.11ProviderServer 2203.0.113.1210.0.1.12ConsumerServer 3203.0.113.1310.0.1.13Provider 副本一、Dubbo 是什么白话JavaRPC 框架——像打电话Consumer 调接口Provider 远程执行并同步返回。比喻Provider 接电话的店员真正干活Consumer 顾客发起调用RegistryZK 电话簿查 Provider 地址Protocol / Port 分机号如 20880、20881与 Kafka 对比DubboKafka模式同步 RPC异步消息发现方式ZK 注册中心Topic Broker典型场景查订单、创建订单要立刻知道结果订单事件通知库存/短信二、本集群环境2.1 三台机器分工名称公网 IPSSH内网 IP角色Server 1203.0.113.1110.0.1.11Provider 主节点Server 2203.0.113.1210.0.1.12ConsumerServer 3203.0.113.1310.0.1.13Provider 副本负载均衡课2.2 注册中心ZooKeeperzookeeper://10.0.1.11:2181?backup10.0.1.12,10.0.1.132.3 项目与部署路径项目路径示例学习笔记docs/本地源码~/projects/dubbo-demo/服务器部署原生 API/opt/dubbo-demo/java-demo/服务器部署Spring Boot/opt/dubbo-demo/spring-boot/2.4 端口规划服务端口应用名原生 Provider20880dubbo-providerSpring Boot Provider20881dubbo-spring-provider20880 公网通常不通安全组内网 RPC 正常。2.5 Java 17 必加参数--add-opens java.base/java.mathALL-UNNAMED --add-opens java.base/java.langALL-UNNAMED三、五课知识地图课次主题核心要点第 1 课原生 Java APIServiceConfig.export()、ReferenceConfig.get()第 2 课Spring BootDubboService、DubboReference、application.yml第 3 课多 Provider 负载均衡ZK 多地址、loadbalanceroundrobin第 4 课超时、重试、容错timeout、retries、failover/failfast第 5 课Dubbo Kafka同步下单 异步order-events四、第 1 课原生 Java API4.1 核心类对照类作用ApplicationConfig应用名RegistryConfig注册中心ZKProtocolConfig协议与端口ServiceConfigProvider 暴露服务ReferenceConfigConsumer 引用服务4.2 Provider 流程ServiceConfigDemoServiceservicenewServiceConfig();service.setInterface(DemoService.class);service.setRef(newDemoServiceImpl());service.export();// 监听端口 注册 ZK4.3 Consumer 流程ReferenceConfigDemoServicerefnewReferenceConfig();ref.setInterface(DemoService.class);DemoServiceproxyref.get();// 动态代理非本地实现proxy.sayHello(xxx);// 远程 RPC4.4 启动命令# ProviderServer 1java--add-opens java.base/java.mathALL-UNNAMED\--add-opens java.base/java.langALL-UNNAMED\-cp/opt/dubbo-demo/java-demo/target/dubbo-java-demo-1.0.0.jar\org.demo.Provider# ConsumerServer 2java--add-opens java.base/java.mathALL-UNNAMED\--add-opens java.base/java.langALL-UNNAMED\-cp/opt/dubbo-demo/java-demo/target/dubbo-java-demo-1.0.0.jar\org.demo.Consumer五、第 2 课Spring Boot 版5.1 项目结构spring-boot/ ├── dubbo-api/ # 公共接口DemoService、OrderService ├── provider/ # DubboService 实现 └── consumer/ # DubboReference 调用5.2 注解对照原生 APISpring BootServiceConfig.export()DubboServiceReferenceConfig.get()DubboReference手动 new Configapplication.ymlEnableDubbo5.3 Provider 配置示例dubbo:application:name:dubbo-spring-providerregistry:address:zookeeper://10.0.1.11:2181?backup10.0.1.12,10.0.1.13protocol:name:dubboport:20881qos:enable:false5.4 打包与运行cd/opt/dubbo-demo/spring-boot mvn clean package-DskipTestsjava--add-opens java.base/java.mathALL-UNNAMED\--add-opens java.base/java.langALL-UNNAMED\-jarprovider/target/dubbo-spring-provider-1.0.0.jarjava...-jarconsumer/target/dubbo-spring-consumer-1.0.0.jar六、第 3 课负载均衡6.1 多 Provider 注册两台 Provider 同接口、同应用名 → ZK 里多个地址/services/dubbo-spring-provider → [10.0.1.11:20881, 10.0.1.13:20881]6.2 负载均衡策略策略说明random默认随机roundrobin轮询本课演示用leastactive选最闲的consistenthash相同参数总打同一台dubbo:consumer:loadbalance:roundrobin或DubboReference(loadbalanceroundrobin)6.3 故障切换一台 Provider 挂了 → Consumer自动只用存活节点第 3 课实验停 Server 312 次全落 Server 1。七、第 4 课超时与容错7.1 timeoutDubboReference(timeout2000)// 毫秒超时抛 TimeoutExceptionProvider 5 秒才返回、timeout 2 秒 →RpcException / TimeoutException。7.2 retries cluster配置含义retries2失败后最多再试 2 次clusterfailover默认失败换节点重试clusterfailfast失败立刻报错不重试7.3 策略选择场景推荐读操作、可重试failover 适当 retries写操作、下单扣款failfastretries07.4 实验结论failover打到慢节点Server 3超时后换 Server 1 重试→ 仍可能成功failfast打到慢节点 →3 秒超时直接失败不重试八、第 5 课Dubbo Kafka8.1 架构Consumer --Dubbo RPC-- OrderServiceImplProvider │ ├── 同步返回 orderId └── Kafka send → order-events8.2 OrderService 接口publicinterfaceOrderService{StringcreateOrder(StringproductName,doubleamount);}8.3 Provider 核心逻辑生成orderIdDubbo 同步返回给 ConsumerKafka 异步发送ORDER_CREATED|...到order-events8.4 Consumer 配置DubboReference(clusterfailfast,retries0)privateOrderServiceorderService;8.5 验证 Kafka 事件/opt/kafka/bin/kafka-console-consumer.sh\--bootstrap-server10.0.1.11:9092\--topicorder-events\--from-beginning九、ZK 排查 Dubbo 注册# 应用级/opt/kafka/bin/zookeeper-shell.sh10.0.1.11:2181\ls/services/dubbo-spring-provider# 接口级/opt/kafka/bin/zookeeper-shell.sh10.0.1.11:2181\ls/dubbo/org.demo.DemoService/providers十、常见问题问题处理Java 17 序列化报错加--add-opensSpring Boot 缺 ZK 客户端依赖dubbo-registry-zookeeperqos 端口 22222 冲突dubbo.qos.enable: falseConsumer 找不到 Provider查 ZK、查 Provider 进程、查防火墙公网连不上 20880正常用内网 IP接口不一致确保dubbo-api模块 Provider/Consumer 共用十一、依赖清单Spring Boot ProviderdependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-spring-boot-starter/artifactId/dependencydependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-registry-zookeeper/artifactId/dependency!-- 第 5 课 Kafka --dependencygroupIdorg.apache.kafka/groupIdartifactIdkafka-clients/artifactIdversion3.6.2/version/dependency十二、命令速查SSH# 示例使用你的密钥与公网 IP 连接 Server 2ssh-i ~/.ssh/your-key.pem root203.0.113.12# Spring ConsumerServer 2java--add-opens java.base/java.mathALL-UNNAMED\--add-opens java.base/java.langALL-UNNAMED\-jar/opt/dubbo-demo/dubbo-spring-consumer-1.0.0.jar# Spring ProviderServer 1java--add-opens java.base/java.mathALL-UNNAMED\--add-opens java.base/java.langALL-UNNAMED\-jar/opt/dubbo-demo/spring-boot/provider/target/dubbo-spring-provider-1.0.0.jar十三、一句话总结Dubbo 同步 RPC 服务治理Provider 暴露接口、ZK 注册发现、Consumer 远程调用配合负载均衡、超时容错保证高可用与Kafka组合时 Dubbo 负责同步业务Kafka 负责异步事件。