1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00

Merge pull request #1234 from karezachen/master

清除无效链接、更新调用过程描述、添加学习材料小标题
This commit is contained in:
Guide哥 2021-06-10 22:03:40 +08:00 committed by GitHub
commit 47bcb7256f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,23 +6,17 @@ RPCRemote Procedure Call—远程过程调用它是一种通过网络
### **RPC原理是什么**
我这里这是简单的提一下,详细内容可以查看下面这篇文章:
http://www.importnew.com/22003.html
![RPC原理图](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-6/37345851.jpg)
1. 服务消费方client调用以本地调用方式调用服务
2. client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体
3. client stub找到服务地址并将消息发送到服务端
4. server stub收到消息后进行解码
5. server stub根据解码结果调用本地的服务
6. 本地服务执行并将结果返回给server stub
7. server stub将返回结果打包成消息并发送至消费方
8. client stub接收到消息并进行解码
9. 服务消费方得到最终结果。
1. 服务消费端client以本地调用的方式调用远程服务
2. 客户端 Stubclient stub 接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体(序列化):`RpcRequest`
3. 客户端 Stubclient stub 找到远程服务的地址,并将消息发送到服务提供端;
4. 服务端 Stub收到消息将消息反序列化为Java对象: `RpcRequest`
5. 服务端 Stub根据`RpcRequest`中的类、方法、方法参数等信息调用本地的方法;
6. 服务端 Stub得到方法执行结果并将组装成能够进行网络传输的消息体`RpcResponse`(序列化)发送至消费方;
7. 客户端 Stubclient stub接收到消息并将消息反序列化为Java对象:`RpcResponse` ,这样也就得到了最终结果。
下面再贴一个网上的时序图:
下面再贴一个网上的时序图,辅助理解:
![RPC原理时序图](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-6/32527396.jpg)
@ -35,10 +29,13 @@ http://www.importnew.com/22003.html
- **RMIJDK自带** JDK自带的RPC有很多局限性不推荐使用。
- **Dubbo:** Dubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。目前 Dubbo 已经成为 Spring Cloud Alibaba 中的官方组件。
- **gRPC** gRPC是可以在任何环境中运行的现代开源高性能RPC框架。它可以通过可插拔的支持来有效地连接数据中心内和跨数据中心的服务以实现负载平衡跟踪运行状况检查和身份验证。它也适用于分布式计算的最后一英里以将设备移动应用程序和浏览器连接到后端服务。
- **Hessian** Hessian是一个轻量级的remotingonhttp工具使用简单的方法提供了RMI的功能。 相比WebServiceHessian更简单、快捷。采用的是二进制RPC协议因为采用的是二进制协议所以它很适合于发送二进制数据。
- **Thrift** Apache Thrift是Facebook开源的跨语言的RPC通信框架目前已经捐献给Apache基金会管理由于其跨语言特性和出色的性能在很多互联网公司得到应用有能力的公司甚至会基于thrift研发一套分布式服务框架增加诸如服务注册、服务发现等功能。
### RPC学习材料
- [跟着 Guide 哥造轮子](https://github.com/Snailclimb/guide-rpc-framework)
## 既有 HTTP ,为啥用 RPC 进行服务调用?
### RPC 只是一种设计而已