# dubbo-project **Repository Path**: ylimhhmily/dubbo-project ## Basic Information - **Project Name**: dubbo-project - **Description**: 通过实战场景推导出 Dubbo 核心内幕 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 4 - **Created**: 2021-10-18 - **Last Updated**: 2025-07-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dubbo-project ## 介绍 通过实战场景推导出 Dubbo 核心内幕 ## 关于博主 1. Gitee 博主仓库 [https://gitee.com/ylimhhmily](https://gitee.com/ylimhhmily) 2. 你可以 [https://www.ixigua.com/home/1574106773066855](https://www.ixigua.com/home/1574106773066855) 来这个地址来学习技术视频 3. 你也可以 [https://blog.csdn.net/YLIMH_HMILY](https://blog.csdn.net/YLIMH_HMILY) 来这个地址来学习技术知识 4. 你还可以 [https://www.jianshu.com/u/a4fd88ccb224](https://www.jianshu.com/u/a4fd88ccb224) 来这个地址来学习技术知识 5. 你更可以添加博主微信 [https://gitee.com/ylimhhmily/SpringCloudTutorial/blob/master/doc/qrcode/PersonalWeChat.png](https://gitee.com/ylimhhmily/SpringCloudTutorial/blob/master/doc/qrcode/PersonalWeChat.png) 6. 想了解更多动态视频分享你还可以关注这里 [https://gitee.com/ylimhhmily/dubbo-project/blob/master/doc/toutiao_main_page.jpg](https://gitee.com/ylimhhmily/dubbo-project/blob/master/doc/toutiao_main_page.jpg) ## 第一章(01-06) 入门篇 ### 01. 架构演进之单体架构 ### 02. 架构演进之垂直架构 ### 03. 架构演进之SOA与微服务架构 #### 3.1 SOA 架构 #### 3.2 微服务架构 ### 04. 没用dubbo前遇到的一些问题 #### 4.1 IP地址太多 #### 4.2 服务方异常宕机 #### 4.3 拆包错误 ### 05. dubbo 架构介绍 ### 06. dubbo-project 工程介绍 #### 6.1 样例代码工程 #### 6.2 zookeeper工具 ## 第二章(07-19) 基础篇 ### 07. 通过 XML 配置启动服务方 #### 7.1 寻找源码的启动类 #### 7.2 定义访问接口 #### 7.3 服务方配置文件 #### 7.4 启动服务提供者 ### 08. 通过 XML 配置启动消费方 #### 8.1 改造消费方启动类 #### 8.2 启动服务消费者 ### 09. 通过 Java 代码启动服务方 #### 9.1 寻找标签定义的源头 #### 9.2 将标签转化为代码 ### 10. 通过 Java 代码启动消费方 #### 10.1 依葫芦画瓢启动消费方 #### 10.2 通过 netty 模拟调用 ### 11. 服务提供方异步化实践 #### 11.1 并发并行同步异步阻塞非阻塞 #### 11.2 CompletableFuture 入门 #### 11.3 AsyncContext#startAsync 样例 #### 11.4 CompletableFuture 样例 ### 12. 服务消费方异步化实践 #### 12.1 通过 getFuture 调用等待结果 #### 12.2 通过 setCallback 调用等待结果 #### 12.3 通过 getCompletableFuture 调用等待结果 ### 13. 服务启动依赖检查 #### 13.1 消费方启动报错 #### 13.2 设置启动不检测 #### 13.3 为什么要关闭启动检查 ### 14. 读写请求重试次数设置 #### 14.1 普遍的 try...catch 做法 #### 14.2 底层的 try...catch 做法 ### 15. 调用失败时的容错设置 #### 15.1 调用失败的可能应对措施 #### 15.2 怎么设置容错配置 ### 16. 负载均衡策略设置 #### 16.1 为什么要负载均衡 #### 16.2 怎么设置负载均衡 ### 17. 线程模型设置 #### 17.1 什么是线程模型 #### 17.2 怎么设置线程模型 ### 18. 服务提供方超时中断流程设置 #### 18.1 还原问题现场 #### 18.2 怎么设置中断 ### 19. 导出线程堆栈设置 #### 19.1 CPU 飙高怎么解决 #### 19.2 代码获取线程堆栈 #### 19.3 怎么设置线程堆栈 ## 第三章(20-28) 高级篇 ### 20. 点对点的直连方式 #### 20.1 点对点体现的场景 #### 20.2 XML 的直连方式 #### 20.3 Java 代码的直连方式 ### 21. 泛化调用(上) #### 21.1 什么是泛化调用 #### 21.2 通过OutputStream调用 #### 21.3 通过Bean引用类型调用 ### 22. 泛化调用(下) #### 22.1 通过String字符串调用 #### 22.2 通过Json字符串调用 #### 22.3 泛化总结 ### 23. 三多配置 #### 23.1 多版本 #### 23.2 多协议 #### 23.3 多注册中心 ### 24. 广播调用 #### 24.1 任何有异常就整体异常 #### 24.2 任何有异常也不抛错 ### 25. 缓存操作 #### 25.1 自定义KeyGenerator #### 25.2 缓存结果加速 ### 26. 上下文信息 #### 26.1 获取当前调用过程中的一些信息 #### 26.2 通过Attachment进行参数隐式传递 ### 27. 参数验证 #### 27.1 通过声名validation来基于Filter实现验证 #### 27.2 通过本地存根在客户端执行部分验证逻辑 ### 28. 延迟操作 #### 28.1 为什么需要延迟暴露 #### 28.2 跟踪源码寻求解决方案 ## 第四章(29-42) 源码篇 ### 29. 分层架构描述 #### 29.1 大话流程概览 #### 29.2 官方分层分包图 ### 30. JDK SPI 与 Dubbo SPI #### 30.1 SPI 存在的意义 #### 30.2 JDK SPI #### 30.3 Dubbo SPI ### 31. Wrapper 减少反射调用开销原理 #### 31.1 为什么不用反射调用 #### 31.2 如何减少调用性能开销 #### 31.3 揭露 Wrapper 真相 ### 32. Compiler 动态编译原理 #### 32.1 哪里会用到动态编译 #### 32.2 dubbo 的动态编译 ### 33. Adaptive 适配器原理 #### 33.1 refer方法你打算怎么封装 #### 33.2 refer方法源码怎么封装 ### 34. AOP 切面拦截 #### 34.1 切面是什么 #### 34.2 怎么使用切面 #### 34.3 切面底层原理 ### 35. IOC 依赖注入 #### 35.1 Spring的简单体现 #### 35.2 dubbo有依赖注入么 #### 35.3 依赖注入原理 ### 36. 提供方发布服务流程剖析(上) #### 36.1 从main到namespace再到export #### 36.2 DubboBootstrap#start准备 #### 36.3 ServiceBean#export准备 ### 37. 提供方发布服务流程剖析(下) #### 37.1 本地导出服务exportLocal #### 37.2 本地暴露服务doLocalExport #### 37.3 本地服务注册到zk注册中心上 ### 38. 消费方引用服务流程剖析 #### 38.1 refer引用的整体流程 #### 38.2 doRefer引用的register注册流程 #### 38.3 doRefer引用的subscribe订阅流程 ### 39. Filter过滤器 #### 39.1 ContextFilter 源码分析 #### 39.2 ConsumerContextFilter 源码分析 #### 39.3 ActiveLimitFilter 源码分析 #### 39.4 ExecuteLimitFilter 源码分析 #### 39.5 MetricsFilter 源码分析 ### 40. 服务降级与Mock机制 #### 40.1 利用 override 动态降级 #### 40.2 消费方 mock 及合法性检查 #### 40.3 消费方降级原理 ### 41. 协议数据帧格式 #### 41.1 为什么需要帧格式 #### 41.2 dubbo数据帧格式 ### 42. 数据编解码 #### 42.1 InternalEncoder 编码原理 #### 42.2 InternalDecoder 解码原理 ## 第五章(43-46):应用篇 ### 43. Cluster实现多套环境隔离 #### 43.1 没有多套环的难处 #### 43.2 服务器 dispatchId 初始化 #### 43.3 暴露服务携带 dispatchId 标识 #### 43.4 拦截获取 dispatchId 标识 #### 43.5 针对 dispatchId 标识进行分组 #### 43.6 系统之间传递 dispatchId 标识 ### 44. Cluster实现代理远程调用 #### 44.1 为什么需要代理调用 #### 44.2 梳理关系调用链路 #### 44.3 准备Cluster包装类 #### 44.4 准备中间站点服务器 ### 45. Filter扩展之多场景应用 #### 45.1 日志摘要 #### 45.2 追加技术属性 #### 45.3 分布式跟踪ID #### 45.4 Cat链路跟踪 ### 46. Protocol上下线控制 #### 46.1 当上下线遇到高并发 #### 46.2 如何巧妙解决上下线 #### 46.3 上下线逻辑架构图 #### 46.4 代码编写精简逻辑 ## 第六章:总结