【RPC框架】RPC与Dubbo(让你一文搞懂,超级详细好理解!)

news2024/11/25 10:57:50

目录

什么是RPC框架,Dubbo又是什么,二者之间有什么联系        

是不是说的有些抽象,那我们来说的通俗易懂点吧,这次你一定能听懂

简单举例

实际例子

真实场景demo(说了这么多,实际体会一下代码吧)

首先有这样的一个项目结构​编辑

 我们现在的consumer项目,想要去调用provider项目中某一个接口的服务

 而consumer内部就需要发送一个http请求去获取这个provider项目中锁提供的服务,也就是先请求打到provider项目中的controller里再去调用它的service

 在我们没有用其他工具的时候,我们就需要自己去构建一个httpConnect的工具,再去发送这样一个http的请求(http://localhost:8080/ provider/ service)

此时我们采用Dubbo的话,就会简便很多


什么是RPC框架,Dubbo又是什么,二者之间有什么联系        

        RPC框架是一种用于实现远程过程调用的软件框架。它提供了一套通信协议、编码/解码机制以及远程调用的功能,可以简化分布式系统中不同计算机之间的通信和调用过程

        Dubbo是一个开源的高性能RPC框架,最初由阿里巴巴公司开发并开源。它提供了一种基于Java语言的轻量级分布式服务框架,用于构建可扩展的、高性能的分布式应用程序。Dubbo在RPC的基础上,提供了更多的功能和特性,如服务注册与发现、负载均衡、容错机制等,使得分布式系统的开发和管理更加便捷。

        因此,Dubbo可以被看作是一个完整的分布式服务框架,内部使用RPC来实现远程调用。它通过封装对底层通信协议的使用,提供了更高层次的抽象和功能,使得开发者能够更专注于业务逻辑的开发,而无需关心底层通信细节。

与传统的RPC相比,Dubbo具有以下特点:

1. 高性能:Dubbo采用了一些优化策略,如请求响应模式、线程池复用、自动扩容等,以提供高性能的服务调用能力。
2. 具备扩展机制:Dubbo提供了插件式的扩展机制,可以灵活地扩展和定制各个功能模块,如协议、负载均衡、容错等。
3. 服务治理:Dubbo提供了服务注册与发现、负载均衡、容错机制等功能,方便管理大规模分布式系统中的服务。
4. 配置化:Dubbo支持通过配置文件来定义服务的各项属性,使得服务的部署和配置更加便捷。
5. 应用监控:Dubbo内置了应用监控的功能,可以对服务进行性能统计和监控。

是不是说的有些抽象,那我们来说的通俗易懂点吧,这次你一定能听懂

简单举例

        当我们在一个分布式系统中有多个计算机(或服务器)需要相互通信和协作时,RPC框架就像是一种通信的规则和工具。它定义了计算机之间如何传输数据、发送请求和接收响应等规范。

        就好比你在一个公司的办公楼内,你需要向另一个同事借一本书。如果没有RPC框架,你可能需要自己走到对方的办公室,亲自向他表达你的请求,并等待他将书递给你。这样的过程非常繁琐,并且需要逐个解决每个人之间的通信问题。

        而使用RPC框架,就像是在办公楼里安装了一个内部电话系统。你只需要拿起电话,拨打同事的座机号码并简单地告诉他你需要借书,然后他可以将书快速送到你的办公桌上。这样,整个借书的过程非常迅速而且便捷。

        那么,Dubbo就是这样一种内部电话系统的框架。它在RPC的基础上提供了更多的功能,比如可以帮助你找到某位同事的座机号码(服务注册与发现),确保电话的稳定连接(负载均衡),以及在对方不在办公室时能够找到备用的人(容错机制)等。

实际例子

        在现实世界中,我们可以将分布式的电商系统作为一个例子。这个系统包括了用户界面、商品服务、订单服务和支付服务等模块,它们分布在不同的服务器上。当用户在网页上点击购买按钮时,需要将购买请求发送到后台的商品服务,生成订单并进行支付。这个过程就需要使用RPC框架来进行不同模块之间的远程调用,以实现数据的传输和协调工作。(精髓就在于将没有部署到一台机器上的模块,能够通过网络实现互相之间的调用)

        而Dubbo作为一个RPC框架,可以帮助这些不同的模块之间建立稳定的通信管道,实现商品服务和订单服务之间的远程调用。同时,Dubbo还提供了负载均衡机制来确保请求被均匀分配到多个服务器上,容错机制可以在某些服务器宕机时自动切换到备用服务器。

        通过使用Dubbo这样的框架,开发人员可以更加专注于业务逻辑的实现,而无需过多关注底层的通信细节和管理问题,从而提高了开发效率和系统的稳定性。

真实场景demo(说了这么多,实际体会一下代码吧)

首先有这样的一个项目结构

 我们现在的consumer项目,想要去调用provider项目中某一个接口的服务

 而consumer内部就需要发送一个http请求去获取这个provider项目中锁提供的服务,也就是先请求打到provider项目中的controller里再去调用它的service

 在我们没有用其他工具的时候,我们就需要自己去构建一个httpConnect的工具,再去发送这样一个http的请求(http://localhost:8080/ provider/ service

这样做的缺点就是:

  1. 路径容易写错
  2. 路径修改的时候请求的路径也需要一个一个做出修改
  3. 得到请求之后的结果以后还需要自己去对结果反序列化,才能拿到对象

此时我们采用Dubbo的话,就会简便很多

 我们只需要加上Dubbo所提供的Reference的这样一个注解,就可以将其他模块的服务自动注入

和直接用http去请求的区别就是——它不会经过controller这一层,直接调用的就是service接口所提供的方法

 然后就相当于直接的调用了模块中的方法,而且不需要自己实现反序列化这个流程

只需要关系你调用的是哪个服务中的哪个方法

大概原理就是这样!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(6)(6.3) 自动任务中的相机控制

文章目录 前言 6.3.1 概述 6.3.2 自动任务类型 6.3.3 创建合成图像 前言 本文介绍 ArduPilot 的相机和云台命令,并说明如何在 Mission Planner 中使用这些命令来定义相机勘测任务。这些说明假定已经连接并配置了相机触发器和云台(camera trigger and gimbal ha…

iis服务web页面 localhost可以访问 ip不能访问

1、修改C:\Windows\System32\drivers\etc\下面hosts文件;需要重启电脑查看效果; 2、通过internet选项-》安全-》站点-》添加对应http://127.0.0.1和对应电能IP;

Android SDK 上手指南||第六章 用户交互

第六章 用户交互 在这篇教程中,我们将对之前所添加的Button元素进行设置以实现对用户点击的检测与响应。为了达成这一目标,我们需要在应用程序的主 Activity类中略微涉及Java编程内容。如果大家在Java开发方面的经验不太丰富也没必要担心,只…

Module not found: Error: Can‘t resolve ‘vue-pdf‘ in ‘xxx‘

使用命令npm run serve时vue项目报错: Module not found: Error: Cant resolve vue-pdf in xxx 解决方案: 运行命令: npm install vue-pdf --save --legacy-peer-deps 即可解决。 再次顺利执行npm run serve

032 - 位值类型-BIT

数据BIT类型用于存储位值。一种类型 允许存储-位值。 范围从 1 到 64。 BIT(M)MM 为了指定位值, 可以使用符号。是使用零和一编写的二进制值。例如, 和 分别代表7和128。请参见 第 9.1.5 节“位值文字”。 bvaluevalueb111b10000000 如果将值分配给 长…

ChatGPT提示与技巧分享:如何作出更好的提示2023年8月

​对ChatGPT的一些酷炫技巧感兴趣吗?这里提供了一些可以帮助你充分利用ChatGPT,成为AI工具专家的技巧。 毫无疑问,ChatGPT是目前最广泛使用的人工智能工具之一。它不仅毫不留情地取代了一些特定领域常用的软件小工具(如智能对联、经典语录生…

2023.8 - java - Java 异常处理

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么…

2023年高教社杯数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&…

缓存穿透、缓存击穿和缓存雪崩

👏作者简介:大家好,我是爱发博客的嗯哼,爱好Java的小菜鸟 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝社区论坛:希望大家能加入社区共同进步…

Linux:LAMP架构与论坛搭建

目录 一、动态资源与语言 二、LAMP 架构的组成 三、CGI和astcgi 3.1CGI​​​​​​ 3.2fastcgi 3.3CGI和fastcgi比较 3.4 PHP 配置 3.5 Opcode语言 四、编译安装Apache http 服务 五、安装论坛 一、动态资源与语言 WEB 资源类型: 静态资源:原…

idea的debug断点的使用

添加断点(目前不知道如何添加断点,就给AutoConfigurationImportSelector的每个方法都加上断点): 然后将StockApplication启动类以debug方式运行,然后程序就会停在119行 点击上边的step over让程序往下运行一行&#x…

如何利用IPIDEA代理IP提高运营效率和安全性

Tiktok印尼用户的每月访问时间长达28.7小时,访问时间远远超过其他社交媒体(FB15.5小时,INS7.8小时)。TikTok Shop在印尼的市场份额跃升,赶超Tokopedia和Lazada。在Tiktok运营中,代理IP可以发挥哪些作用呢&a…

Java“牵手”天猫商品列表数据,关键词搜索天猫商品数据接口,天猫API申请指南

天猫商城是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取天猫商品列表和商品详情页面数据,您可以通过开放平台的接口或者直接访问天猫商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

基于风险的漏洞管理

基于风险的漏洞管理涉及对即将被利用的漏洞的分类响应,如果被利用,可能会导致严重后果。本文详细介绍了确定漏洞优先级时要考虑的关键风险因素,以及确保基于风险的漏洞管理成功的其他注意事项。 什么是基于风险的漏洞管理对基于风险的漏洞管…

N皇后【回溯】

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种…

应用3:VBA中字符串值的比较方案

【分享成果,随喜正能量】活得通透的人 ,没有特别想维持的关系 ,也没有特别想要的东西 ,走近的人不抗拒 ,离开的人不强留 ,就连吃亏也懒得计较。。 《VBA经典应用69例》(10178981)&a…

Linux系统安装与配置Anaconda

Linux系统安装与配置Anaconda 下载Linux系统的Anaconda安装包安装Anaconda将Anaconda加入到环境变量测试Anaconda是否安装成功 下载Linux系统的Anaconda安装包 这里提供2种下载方式: 官网下载清华大学开源镜像软件 将下载的Anaconda包保存在Linux系统中。 安装A…

Winter ‘24发布在即,Salesforce Flow中的最热功能不容错过!

Flow Builder作为自动化领域的新秀,它在功能方面已经远远超过Workflow Rules和Process Builder,随着Workflow Rules和Process Builder的退役,目前所有自动化都需要迁移到Flow。 Winter 24发布在即,Flow中的亮点功能不容错过&…

生成折线图【Python思路】

# 第一步:导包 from pyecharts.charts import Line# 第二步:得到折线图对象 line Line()# 第三步:打开数据文件 (数据为JSON格式) f open("D:/text.txt","r",encodingUTF-8) data f.read()# 第四步:根据需…

Linux最小系统实现

最小系统介绍 什么是最小系统?怎么实现? 使用printf实现打印hello world 有没有更简单的实现? (1) 不使用外部任何库,头文件 (2) 单个文件 (3) 最简单的代…