高性能RPC框架—----------------------Dubbo一站式快速入门
一、Web应用架构的演变随着互联网的发展网站应用的规模不断扩大Web应用架构也在不断的演变主要经历了四个阶段1. 单一应用架构当网站访问量很小时只需要一个应用程序将所有的功能都部署在一起以减少部署节点和成本。关键问题简化数据库操作数据访问框架ORM是核心。适用场景小型网站、管理系统、简易办公系统。局限扩展性差不便于协同开发不利于升级维护2. 垂直应用架构当访问量逐渐增大单一应用单机负载太大此时可以增加服务器来进行负载均衡提高响应速度即集群。但是当增加的服务器到达一定数量时所带来的加速度会越来越小此时单纯的增加服务器已无法明显提升响应速度。此时需要将系统业务拆分成多个互不相关的系统分别部署在独立的服务器上以提升效率称为垂直应用。关键问题加速前端页面开发MVC框架MVVM。优点通过拆分项目的业务实现业务上的独立降低了开发和维护的难度便于协同开发提高了扩展性。局限每个垂直模块中都有相同的内容entity、dao、service、web公共资源无法复用且业务逻辑与界面无法分离。3. 分布式服务架构当垂直应用越来越多应用之间的交互无法避免有些业务系统无法完全拆分为独立系统。此时可以将核心业务抽取出来作为独立的服务Service逐渐的形成稳定的服务中心使前端应用能够更好的适应市场需要的变化。关键问题提高业务的利用以及整合分布式服务框架RPCRemote Procedure Call 远程过程调用。4. 流动计算架构当服务越来越多服务之间的调用和依赖关系也越来越复杂诞生了面向服务的架构体系SOAService-Oriented Architecture。容量的评估小服务资源的浪费等问题开始出现此时需要增加一个调度中心基于访问压力实时的管理集群容量提高集群利用率。关键问题资源调度和治理中心使用dubbozookeeper。二、RPC简介1. RPC是什么RPCRemote Procedure Call 远程过程调用。是一种进程间的通信方式它允许应用程序调用网络上的另一个应用程序中的方法对于服务的消费者而言无需了解远程调用的底层细节透明的2. 执行流程客户端发起调用请求客户端存根对请求参数接口、方法、参数等进行序列化封装客户端存根向服务器存根发送消息服务端存根对接收到的消息进行反序列化服务端存根发送请求调用本地方法服务器执行业务处理服务器返回处理结果服务端存根对处理结果进行序列化服务端存根将结果返回给客户端存根客户端存根对接收到的结果进行反序列化客户端存根将结果返回给客户端三、Dubbo简介1. Dubbo是什么Apache Dubbo是一款高性能的Java RPC框架由阿里巴巴开发开源贡献给Apache。提供了三个核心功能面向接口的远程方法调用智能容错和负载均衡服务自动注册和发现参考官网 http://dubbo.apache.org2. Dubbo体系结构执行流程Provider服务的提供者负责对外提供服务提供者在启动的时候需要向Registry注册自己能够提供的服务Consumer服务的消费者消费者在启动的时候需要向Registry订阅自己需要的服务Registry注册中心接受注册和订阅会异步的通知订阅者向消费者提供服务列表Monitor监控中心统计服务的调用次数和调用时间服务消费者和提供者会在内存中累计调用次数和调用时间定时每分钟向监控中心发送一次统计数据当消费者需要执行远程过程调用时会从Registry获取到服务地址列表基于负载均衡算法进行调用如果调用失败会重新选择新的提供者再次调用。四、使用Dubbo1. Spring版1.1 创建common工程创建entity和service接口。1.2 创建provider工程步骤添加依赖!--依赖于dubbo-common-- dependency groupIdcom.itany/groupId artifactIddubbo-common/artifactId version1.0-SNAPSHOT/version /dependency !--spring-- dependency groupIdorg.springframework/groupId artifactIdspring-core/artifactId version${springversion}/version /dependency dependency groupIdorg.springframework/groupId artifactIdspring-beans/artifactId version${springversion}/version /dependency dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version${springversion}/version /dependency dependency groupIdorg.springframework/groupId artifactIdspring-expression/artifactId version${springversion}/version /dependency !--dubbo核心包-- dependency groupIdcom.alibaba/groupId artifactIddubbo/artifactId version2.6.2/version /dependency !--使用zookeeper作为注册中心在dubbo中会访问zookeeper-- dependency groupIdorg.apache.zookeeper/groupId artifactIdzookeeper/artifactId version3.4.13/version /dependency !--zookeeper的客户端实现-- dependency groupIdorg.apache.curator/groupId artifactIdcurator-framework/artifactId version4.0.1/version /dependency编写实现类public class UserServiceImpl implements UserService { Override public User findById(int id) { System.out.println(UserServiceImpl.findById); User user new User(); user.setId(id); user.setUsername(tom); user.setPassword(123); return user; } }配置dubbo!--配置当前dubbo应用程序的名称可自定义但必须唯一一般使用项目名-- dubbo:application namedubbo-provider/ !--指定注册中心地址-- dubbo:registry addresszookeeper://127.0.0.1:2181/ !--配置dubbo协议和端口通过该端口来提供服务-- dubbo:protocol namedubbo port8888/ !--指定要暴露的服务接口-- dubbo:service interfacecom.itany.service.UserService refuserService/ bean iduserService classcom.itany.service.impl.UserServiceImpl/1.3 创建consumer工程步骤添加依赖同1.2编写使用类Controller public class UserController { private UserService userService; public void setUserService(UserService userService) { this.userService userService; } public void findUser(){ User user userService.findById(1001); System.out.println(user); } }配置Dubbodubbo:application namedubbo-consumer/ dubbo:registry addresszookeeper://127.0.0.1:2181/ !--指定要引用的服务-- dubbo:reference iduserService interfacecom.itany.service.UserService/ bean classcom.itany.controller.UserController property nameuserService refuserService / /bean1.4 测试启动zookeeper编写并运行providerpublic static void main(String[] args) { ApplicationContext ac new ClassPathXmlApplicationContext(classpath:provider.xml); //阻塞线程 new Scanner(System.in).next(); }编写并运行consumerpublic static void main(String[] args) { ApplicationContext ac new ClassPathXmlApplicationContext(classpath:consumer.xml); UserController userController ac.getBean(UserController.class); userController.findUser(); //阻塞线程 new Scanner(System.in).next(); }2. Spring注解版2.1 改写provider!--dubbo组件的扫包-- dubbo:annotation packagecom.itany.service.impl/ !--spring组件的扫包-- context:component-scan base-packagecom.itany.service.impl/// 方式1 // Service // com.alibaba.dubbo.config.annotation.Service // 方式2 Component Service public class UserServiceImpl implements UserService { // 实现代码 }2.2 改写consumerdubbo:annotation packagecom.itany.controller/ context:component-scan base-packagecom.itany.controller/Controller public class UserController { // 使用dubbo的Reference注入远程服务对象 Reference private UserService userService; // 方法实现 }3. SpringBoot版3.1 创建provider工程步骤添加依赖!--依赖于dubbo-common-- dependency groupIdcom.itany/groupId artifactIddubbo-common/artifactId version1.0-SNAPSHOT/version /dependency !--dubbo的starter-- dependency groupIdcom.alibaba.boot/groupId artifactIddubbo-spring-boot-starter/artifactId version0.2.0/version /dependency编写实现类Component Service public class UserServiceImpl implements UserService { Override public User findById(int id) { User user new User(); user.setId(id); user.setUsername(alice); user.setPassword(123); return user; } }配置dubboserver: port: 8881 dubbo: application: name: boot-provider registry: address: zookeeper://127.0.0.1:2181 protocol: name: dubbo port: 8888启用dubboSpringBootApplication EnableDubbo //启用dubbo public class BootProviderApplication { public static void main(String[] args) { SpringApplication.run(BootProviderApplication.class, args); } }3.2 创建consumer步骤添加依赖同3.1编写使用类Controller RequestMapping(/user) public class UserController { Reference private UserService userService; RequestMapping(/findUser) public String findUser(int id, Model model) { User user userService.findById(id); model.addAttribute(user, user); return success; } }配置dubboserver: port: 8882 dubbo: application: name: boot-consumer registry: address: zookeeper://127.0.0.1:2181 spring: thymeleaf: cache: false五、配置dubbo1. 配置的覆盖关系dubbo属性可以配置在如下六个位置消费者引用方法处提供者暴露方法处消费者引用接口处提供者暴露接口处消费者全局配置处提供者全局配置处优先顺序方法级优先接口级次之全局配置再次之。如果级别一样则消费方优先提供方次之注建议由服务提供者设置超时时间。2. 常用配置配置项作用timeout超时时间单位为毫秒默认1000msretries重试次数不包括第一次调用默认为20表示不重试check启动时检查提供者是否存在true表示不存在时报错false表示启动时不检查默认为trueurl点对点直连服务提供者绕过注册中心以服务接口为单位六、监控中心1. dubbo-adminDubbo的管理控制台可以对提供者和消费者进行管理便于调试发现问题解决问题。1.1 下载dubbo-admin方式一从GitHub下载推荐访问Dubbo官方GitHub仓库GitHub - apache/dubbo-admin: The ops and reference implementation for Apache Dubbo. · GitHub点击页面右侧的Code按钮选择Download ZIP下载最新源码或者使用Git命令克隆git clone https://github.com/apache/dubbo-admin.git方式二从Apache官网下载访问Apache Dubbo官网Apache Dubbo在下载页面找到dubbo-admin的发布版本选择适合的版本下载通常为.zip或.tar.gz格式1.2 环境准备在部署dubbo-admin之前需要确保以下环境已就绪Java环境JDK 1.8或更高版本Maven3.5或更高版本用于源码编译ZooKeeper已安装并运行Dubbo的注册中心Node.js14.x或更高版本前端部分需要1.3 部署与启动步骤步骤1解压并进入项目目录# 解压下载的文件 unzip dubbo-admin-master.zip # 或 tar -zxvf dubbo-admin-xxx.tar.gz 进入项目目录 cd dubbo-admin步骤2修改配置文件找到配置文件dubbo-admin-server/src/main/resources/application.properties或application.yml修改以下关键配置# 注册中心地址根据实际情况修改 dubbo.registry.addresszookeeper://127.0.0.1:2181 管理控制台端口 server.port8080 数据库配置如果需要持久化 spring.datasource.urljdbc:mysql://localhost:3306/dubbo_admin?useUnicodetruecharacterEncodingutf-8 spring.datasource.usernameroot spring.datasource.password123456步骤3编译打包# 使用Maven进行编译打包 mvn clean package -Dmaven.test.skiptrue 编译成功后在target目录下会生成dubbo-admin-server-xxx.jar文件步骤4启动dubbo-admin# 方式一直接运行jar包 java -jar dubbo-admin-server/target/dubbo-admin-server-xxx.jar 方式二使用Spring Boot Maven插件启动 mvn spring-boot:run -pl dubbo-admin-server步骤5访问管理控制台启动成功后在浏览器中访问http://localhost:8080默认登录账号root默认登录密码root1.4 Docker方式部署可选如果使用Docker可以更快速地部署dubbo-admin# 拉取官方镜像 docker pull apache/dubbo-admin 运行容器 docker run -d --name dubbo-admin -p 8080:8080 -e admin.registry.addresszookeeper://宿主机IP:2181 -e admin.config-centerzookeeper://宿主机IP:2181 -e admin.metadata-report.addresszookeeper://宿主机IP:2181 apache/dubbo-admin1.5 主要功能说明登录dubbo-admin后可以查看以下主要功能服务治理查看所有注册的服务提供者和消费者服务测试在线测试Dubbo服务接口配置管理动态修改服务配置流量管理进行流量控制和服务降级监控统计查看服务调用统计和性能指标注意事项确保ZooKeeper服务已启动且dubbo-admin能正常连接生产环境建议修改默认账号密码根据实际网络环境调整配置文件中的IP和端口定期查看日志文件监控dubbo-admin运行状态七、总结与参考资料1. 总结本文系统性地介绍了Web应用架构的演变历程从单一应用架构到流动计算架构展示了随着业务规模扩大和技术发展架构模式如何逐步演进以满足更高的性能、可扩展性和可维护性需求。RPC远程过程调用作为分布式系统的核心技术通过客户端存根和服务端存根的协作实现了跨网络的方法调用透明化为分布式服务架构提供了基础通信机制。Apache Dubbo作为一款高性能的Java RPC框架在RPC基础上提供了完整的服务治理能力服务注册与发现通过注册中心实现服务的自动注册和发现负载均衡智能分配请求到多个服务提供者容错机制提供多种容错策略保证系统稳定性监控管理通过dubbo-admin实现服务的可视化管理和监控通过Spring、Spring注解和SpringBoot三种集成方式Dubbo能够灵活适应不同的开发场景为微服务架构提供了可靠的技术支撑。2. 参考资料Dubbo官方文档Apache Dubbo - Apache Dubbo官方网站包含完整的使用文档、API参考和最佳实践ZooKeeper官网Apache ZooKeeper - Apache ZooKeeper官方网站Dubbo常用的注册中心实现Dubbo GitHub仓库GitHub - apache/dubbo: The java implementation of Apache Dubbo. An RPC and microservice framework. · GitHub - Dubbo开源代码仓库包含最新源码和问题反馈Dubbo-admin GitHub仓库GitHub - apache/dubbo-admin: The ops and reference implementation for Apache Dubbo. · GitHub - Dubbo管理控制台源码技术博客Dubbo官方博客 - 包含Dubbo最新特性、版本更新和技术分享建议读者在实际项目中根据业务需求选择合适的架构模式并结合Dubbo的丰富功能构建稳定、高效的分布式系统。

相关新闻

构建个人项目脚手架:告别一次性脚本,打造可持续开发工作流

构建个人项目脚手架:告别一次性脚本,打造可持续开发工作流

最近在整理本地项目时,发现一个挺有意思的现象:很多开发者,包括我自己,都习惯性地把一些临时性的、探索性的代码脚本随手扔在某个文件夹里,然后……就没有然后了。这些脚本可能是一次性的数据处理、一个临时的API测试、…

2026/8/11 1:54:51 阅读更多 →
AI治理技术化实践:从公平性评估到可解释性分析的工程落地

AI治理技术化实践:从公平性评估到可解释性分析的工程落地

AI治理,到底应该写在代码里,还是写在纸面上?这是一个看似宏大、抽象,却与每一位开发者、产品经理和算法工程师都息息相关的问题。当我们在讨论AI治理时,很多人会立刻想到伦理委员会、白皮书、行业公约这些“纸面政策”…

2026/8/11 1:54:50 阅读更多 →
7/8螺纹气体防爆vs7/8-16unf粉尘防爆:连接器选型一张表讲透不踩坑

7/8螺纹气体防爆vs7/8-16unf粉尘防爆:连接器选型一张表讲透不踩坑

在石油化工、煤矿、粮食加工等爆炸性环境中,7/8螺纹连接器是常见的大电流接口。但在选型时,很多人分不清气体防爆(如Ex db、Ex eb)与粉尘防爆(如Ex tb、Ex tc)的差异,甚至误以为“防爆就是防爆&…

2026/8/11 1:53:50 阅读更多 →

最新新闻

17. 智能指针上

17. 智能指针上

智能指针智能指针的必要性:内存泄漏与异常安全智能指针(smart pointer)是行为类似于指针的类对象,但这种对象还有额外功能——它拥有析构函数,在对象过期时自动释放其指向的内存。本节介绍三个可帮助管理动态内存分配的…

2026/8/11 2:49:10 阅读更多 →
Python社区疫情管理系统开发实战与优化技巧

Python社区疫情管理系统开发实战与优化技巧

1. 项目背景与核心需求社区疫情管理系统是2020年后出现的新型信息化管理工具,主要用于社区层面的疫情数据采集、人员流动监控和应急资源调度。这个Python毕业设计项目需要解决三个核心痛点:社区工作人员手工登记效率低下(平均每人每天处理50-…

2026/8/11 2:49:10 阅读更多 →
金鱼 MiniMax H3 工作流

金鱼 MiniMax H3 工作流

工作流 https://www.runninghub.cn/post/2084514856253874178?inviteCoderh-v1333 官方Skill https://github.com/MiniMax-AI/MiniMax-H3/tree/main/skills 加速Lora https://huggingface.co/larryvrh/MiniMax-H3-Turbo-Lora 节点 https://github.com/T8mars/comfyui-m…

2026/8/11 2:49:10 阅读更多 →
Photo Sphere Viewer 中文指南:从零构建Web全景图查看器

Photo Sphere Viewer 中文指南:从零构建Web全景图查看器

1. 项目概述:全景图查看器的中文世界 如果你正在寻找一个功能强大、易于集成且完全免费的开源全景图查看器,那么 Photo Sphere Viewer 绝对是一个绕不开的名字。作为一个在 Web 前端可视化领域摸爬滚打了多年的开发者,我见过太多项目因为选型…

2026/8/11 2:49:10 阅读更多 →
基于DeepSeek的学术论文写作:从选题到初稿的AI辅助全流程指南

基于DeepSeek的学术论文写作:从选题到初稿的AI辅助全流程指南

1. 背景与核心概念:AI如何重塑学术写作流程每到毕业季,论文写作就成了无数学生,尤其是本科和硕士研究生的“头号难题”。从选题开题、文献综述、研究方法设计,到数据分析、章节撰写、格式调整,每一个环节都耗时耗力。传…

2026/8/11 2:49:09 阅读更多 →
电赛ACAC变换电路并联运行:功率扩容与均流控制实战指南

电赛ACAC变换电路并联运行:功率扩容与均流控制实战指南

1. 先搞清楚ACAC并联到底要解决什么,以及为什么电赛会考这个如果你正在准备电赛,尤其是电源方向的题目,看到“ACAC变换电路并联运行”这个标题,第一反应可能是:这听起来像是一个复杂的电力电子系统设计。没错&#xff…

2026/8/11 2:48:09 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →