首页 > 编程知识 正文

rpc协议详解,rpc框架是什么

时间:2023-05-03 06:54:37 阅读:172513 作者:4047

RPC是远程进程调用的简称,广泛应用于大规模分布式APP应用中,有助于系统的垂直分割,便于系统的扩展。 Java中RPC框架很多,各有特色,广泛使用的有RMI、Hessian、Dubbo等。 RPC还有一个特征可以跨越语言。 本文仅举JAVA语言的RPC为例。

RPC有逻辑图。 以RMI为例。

其他框架的结构也很相似,不同之处在于对象的序列化方式、传输对象的通信协议以及注册中心的管理和故障转移设计(利用zookeeper )。

客户端和服务器可以在不同的JVM上运行,客户端只需要部署接口,实现和运行接口所需的数据在服务器端。 RPC的主要依赖技术是序列化、反序列化和传输协议,JAVA支持对象序列化、反序列化和序列化数据的传输。 RMI序列化和反序列化随JAVA提供,Hessian中的序列化和反序列化是专用的,传输协议为HTTP,Dubbo序列化有多种选择,一般为Hessian 关于序列化,我们也知道谷歌的ProBuffer、JBoss Marshalling、ApacheThrift等。 我以前写过介绍ProBuffer的博文

1、RMI(远程方法调用)

JAVA附带的远程方法调用工具,但有其局限性。 毕竟是JAVA语言最初的设计,之后很多框架的原理都是基于RMI的。 RMI的使用如下。

对外接口

span style='font-size:12px;' publicinterfaceiserviceextendsremote { public string query name (string no ) throws RemoteException; (}/span 服务实现

import java.rmi.RemoteException; import Java.RMI.server.unicastremoteobject; //服务是publicclassserviceimplextendsunicastremoteobjectimplementsiservice {/* */privatestaticfinallongserialversionuid=@ throwsremoteexception */protectedserviceimpl (throwsremoteexception ) super ); (/) (non-javadoc ) ) ()/@ overridepublicstringqueryname (string no ) throwsremoteexception(/方法的具体实现system.out } } RMI客户端

import java.rmi.AccessException; import Java.RMI.notboundexception; import java.rmi.RemoteException; import Java.RMI.registry.locate registry; import Java.RMI.registry.registry; //RMI客户端公共类客户端(公共状态卷(string [ ] args ) )//注册管理器注册注册注册注册=空; try { //获取服务注册管理器registry=locate registry.getregistry (' 127.0.0.1 ',8088 ); //所有已注册的服务String[] list=registry.list (; for(strings:list ) system.out.println; }catch(remoteexceptione ) (try ) /基于命名的服务iserviceserver=(I service ) registry.lookup ) ' vince ' ); //远程方法string result=server.query name (hahaha ); //调用结果system.out.println (resultfromremote : ) result ); } catch { accessexceptione } { } catch { remoteexceptione } { } catch { notboundexceptione } { } http://ww.Sina.com /

import java.rmi.RemoteException; import Java.RMI.registry.locate registry; import Java.RMI.registry.registry; //RMI服务器端公共类服务器(publicstaticvoidmain (string [ ] args )//注册管理器注册注册注册注册=null; 创建try { //服务注册管理器registry=locate registry.create registry (8088 ); } catch (远程扩展) try(/服务serviceimplserver=newserviceimpl ); //将服务绑定到registry.rebind('vince ',server ); system.out.println(bindserver ); }catch(remoteexceptione ) }服务注册管理器写在服务器上,当然也可以提取并单独作为服务。 在其他一些框架中,Zookeeper经常用于注册管理角色。

RMI服务端

基于HTTP协议的传输在性能方面还不够,负载均衡和故障转移依赖于APP应用的负载均衡器。 Hessian的使用与RMI类似,但它淡化了Registry的作用,并利用代理对象通过显示的地址调用基于HessianProxyFactory所在的地址创建Hessian

2、Hessian(基于HTTP的远程方法调用)

基于Netty的高性能RPC框架是阿里巴巴的开源,总体原理如下。

在了解Dubbo之前,请先深入了解Zookeeper。 理解了Zookeeper,Dubbo也就没有秘密了。

Dubbo的详细说明在淘宝开源中得到了非常详细的阐述。 在工作中很多生产项目都使用了Dubbo。 在这个过程中,我也发现了很多应该注意的地方。 特别是其中的许多结构,如果设置不当,就会令人头疼。 最好基于现有的开源Dubbo进行定制和优化。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。