版权声明:本文为博主原创文章,遵循<a href="http://creativecommons.org/licenses/by-sa/4.0/" target="_blank" rel="noopener"> CC 4.0 BY-SA </a>版权协议,转载请附上原文出处链接和本声明。

RPC是远程调用过程的简写,是一个协议,处于网络通信协议的第五层:会话层,其下就是TCP/IP协议,在建立在其基础上的通信会话协议。RPC定义了交互的模式,而应用程序使用这些模式,来访问其他服务器的方法,并不需要关系具体的网络上的细节。

一、RPC基础知识

1.RPC模式

RPC采用C/S模式,客户端发送请求,服务端响应。

基于底层的协议,比如TCP/IP模式。

2.设计目的

①通过固定的协议,调用非本机的方法

②实现不同程序语言之间的通信

③不需要了解底层协议,像本地方法一样调。它完全封装了网络传输,以及其他细节。

二、RPC过程详解

图一   RPC调用过程

从RPC的角度看,应该有服务的提供方,即生产者;还有服务的调用方,即消费者。

对消费者来时,在RPC调用过程中,使用第1步、第2步、第3步、第4步是透明的,其他的都是使用RPC框架去封装这些事情。当应用开始调用PRC的方式时,就会去容器中去取Bean对象,所以我们应该首先注册Bean对象到容器中,我们通过Java的动态代理,将代理过程封装到代理对象中,代理对象实现接口,创建实例到容器中。相应的,在调用远程对象的对象方法时,就会调用动态代理中的方法,这就是代理层的作用。

代理对象在获取到请求方法、接口和参数时,就会用序列化层,将这些信息封装成一个请求报文,再让通信层向服务端传送报文的内容,然后就到了生产者这块。

相应的服务必须有个监听器,来监听来自其他服务的请求,一般都会用容器做消息的监听,就会调用对应的Bean对象的方法,去处理响应的请求。当然,RPC框架不会让容器中的每一个框架都会被调用,所以只有注册了的Bean才会被RPC的请求调用到。然后,通过请求中的类、方法、参数,反射调用对应的Bean,拿到结果之后,通过序列化层,封装好结果报文,服务端的通信层将报文反馈给调用方,调用方解析到返回值,动态代理类返回结果,调用结束。

这样,一个完整的RPC调用反馈链条就完成了。

1.消费者设计

图二  消费者设计

①代理层:

消费者将对应的接口,通过RPC框架的代理来生成一个对象到Spring容器中。代理层将代理接口生成该接口的对象,该对象处理调用时传过来的对象、方法、参数,通过序列化层封装好,调用网络层。

②序列化层:

将请求的参数序列化成报文;将返回的报文反序列化成对象;

③网络层:

将报文与服务端通信;接收返回结果。

2.生产者设计

图三  生产者设计

①代理层:

一个应用提供服务,必须由一个网络监听的模块,这个模块大多有开源的容器来处理网络上的监听;服务需要注册,只有注册了的服务才可以被调用;注册的服务需要被我们发射调用到,来进行相应的处理。

②序列化层:

就是相应的做请求的反序列化和结果的序列化。

③网络层:

接收客户端报文;将序列化的结果返回给客户端。

三、RPC模式总结

图三  RPC模式总结

1.Proxy代理层

用于对象的代理;对象的反射调用;RPC流程的控制。

2.Serialize序列化层

将请求序列化和结果反序列化。

3.Invoke网络模块

主要用于网络通信的相关处理。

4.Container容器组件

这层主要用于代理层监听网络请求。

rpc通信原理及运行过程相关推荐

  1. JSP运行原理及运行过程

    学习J2EE时,初步了解了JSP,写过一篇小的总结:J2EE-JSP,当时还不是很了解它的运行机制. 学习DRP时,再次接触了JSP,在原来基础上有了更深的了解,了解了它的执行原理 1,JSP的运行原 ...

  2. JSP 原理与运行过程

    文章目录 什么是 JSP? JSP 在本质上就是一个 Servlet 程序? JSP的执行过程 什么是 JSP? JSP(全称JavaServer Pages)是由 Sun Microsystems ...

  3. Linux X Window System运行原理和启动过程

    本文主要说明X Window System的基本运行原理,其启动过程,及常见的跨网络运行X Window System. 一) 基本运行原理 X Window System采用C/S结构,但和我们常见 ...

  4. 操作系统之内存管理:1、内存管理基础知识(指令工作原理、地址转化、程序运行过程)

    1.内存管理基础知识(指令工作原理.地址转化.程序运行过程) 思维导图 什么是内存? 指令的工作原理 装入模块的三种实现 绝对装入 可重定位装入 动态重定位 程序的运行过程 链接的三种方式 思维导图 ...

  5. 简述计算机控制系统调试和运行的过程,简述计算机原理与系统启动过程

    一.哈佛结构与冯·诺依曼结构 1.冯.诺曼结构处理器比较,哈佛结构处理器有两个明显的特点: (1).使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存: (2).使用独立 ...

  6. Runc容器运行过程及容器逃逸原理

    原文链接:https://ethantang.top/posts/runc-container/ 在每一个Kubernetes节点中,运行着kubelet,负责为Pod创建销毁容器,kubelet预定 ...

  7. 小程序执行运行过程原理_活性污泥法基本原理、净化反应过程、工艺类型和运行过程中存在的问题...

    ↑ 点击上方"表面活性剂平台"关注我们 活性污泥法实质上是天然水体自净作用的人工强化,能从污水中去除溶解态和胶体态的可生物降解有机物以及能被活性污泥吸附的悬浮固体和其他物质,具有对 ...

  8. grpc通信原理_容器原理架构详解(全)

    目录 1 容器原理架构 1.1 容器与虚拟化 1.2 容器应用架构 1.3 容器引擎架构 1.4 Namespace与Cgroups 1.5 容器镜像原理 2 K8S原理架构 2.1 K8S主要功能 ...

  9. HwBinder驱动篇-Android10.0 HwBinder通信原理(十)

    摘要:本节主要来讲解Android10.0 HwBinder驱动的流程 阅读本文大约需要花费24分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设 ...

最新文章

  1. hdu3338 最大流
  2. Job Processing 工序安排
  3. Java学习笔记二:数据类型
  4. halcon/c++接口基础 之异常处理
  5. java 线程安全性_我如何测试Java类的线程安全性
  6. 天下为公:TCP堵塞控制
  7. Oracle 有long类型字段的表 使用insert into select 语句 ,出现:ORA-00997 错误
  8. VS2008无法识别的版本3.5
  9. 【python VS Code】调用自定义模块 ModuleNotFoundError: No module named XXX
  10. 计算机日常英语,计算机英语的常用句子
  11. bilibili怎么用用户名登录_b站(bilibili)账号只记得用户名忘了密码怎么办?实名认证能找回吗...
  12. 【转】各种字符串算法大总结
  13. RTCM CRC-24校验计算
  14. 如何恢复手机删除数据文件
  15. 第16期高级转录组分析和R数据可视化培训(2022年1月)
  16. AI研究生的文学情怀,厦大硕士毕业生文言致谢聊三年求学路
  17. 万字长文细说 Code Review 的正确姿势
  18. 计算机主板上的ide,计算机主板上的IDE接口通常是连接什么设备的数据接口?
  19. STM32和51单片机有什么区别
  20. 1、MyBatis框架入门学习CRUD

热门文章

  1. Java:定义一个数组,输出数组中的最大值,平均值,以及求和
  2. 企业管理培训进入存量时代,博商管理的“熵减”之道
  3. linux ps1 目录颜色,Linux主机名颜色设置,ps1设置,然linux有颜色 -电脑资料
  4. GET http://localhost:18086/css/all.css:浏览器无法访问项目下的静态资源
  5. mysql之三星索引
  6. 【ps】gif动态图白边问题
  7. 6大技巧教你最大化抖音的推广效果_云媒易
  8. App环境分离的实现:iOS篇,正式版 与 beta版本的快速分离
  9. DHCP应用——获取下挂设备列表信息
  10. 软考设计模式知识点汇总