博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RPC框架调用过程详解
阅读量:5288 次
发布时间:2019-06-14

本文共 1537 字,大约阅读时间需要 5 分钟。

RPC框架调用过程详解

版权声明:本文为博主原创文章,遵循版权协议,转载请附上原文出处链接和本声明。
本文链接:

 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协议的设计理念,理解学习RPC有助于我们更好的理解分布式服务框架,这属于分布式服务的基础,下一篇博文将为大家介绍一下详细的分布式框架。

转载于:https://www.cnblogs.com/think90/p/11437116.html

你可能感兴趣的文章
ActionBar
查看>>
Ajax上传文件到C#Action中
查看>>
实现android上解析Json格式数据功能
查看>>
最短路算法--模板
查看>>
利用树莓派3搭建可以发射无线局域网的微型服务器
查看>>
Linux查看系统的基本信息
查看>>
eclipse jsp 文字设置
查看>>
Android--多线程之AsyncTask
查看>>
cxdbImage以及图像显示
查看>>
36、UI contrast and settings
查看>>
HDU 2070 Fibbonacci Number
查看>>
骰子作业
查看>>
C++虚函数与纯虚函数用法与区别(转)
查看>>
jq中的substring(x)和substring(x,y) 字符截取用法
查看>>
BNUOJ-22868-Movie collection(树状数组)
查看>>
C# POST与Get数据
查看>>
扩展django的User的部分方法
查看>>
ISAP算法对 Dinic算法的改进
查看>>
池化层pooling
查看>>
Being a JSP: using JSP(Head First Servlets and JSP)
查看>>