rpc框架有哪些功能,rpc框架有哪些 java
如何解决写爬虫IP受阻的问题?立即使用。
rpc框架有:
RPC是远程过程调用的缩写,广泛应用于大型分布式应用。它的作用是帮助系统的垂直拆分,使其更容易扩展。Java里有很多RPC框架,各有各的特点。RMI,Hessian和Dubbo应用广泛。RPC的另一个特点是可以跨语言。本文仅以JAVA语言的RPC为例。
RPC有一个逻辑图。以RMI为例:
其他框架结构类似,区别在于对象的序列化方法,传递对象的通信协议,注册表的管理和故障转移设计(使用zookeeper)。
客户端和服务器可以运行在不同的JVM中。客户端只需要引入接口,接口的实现和运行时需要的数据都在服务器端。RPC主要依靠序列化、反序列化和传输协议,而JAVA对应的是对象的序列化和反序列化以及序列化数据的传输。RMI的序列化和反序列化是JAVA原生的,而Hessian的序列化和反序列化是私有的,而传输协议是HTTP。Dubbo的连载可以有很多选择。一般使用Hessian的序列化协议,传输使用TCP协议,使用高性能NIO框架Netty。对序列化有所了解,比如Google的ProBuffer,JBoss Marshall,Apache Thrift。之前写过一篇关于ProBuffer的博文。
1、RMI(远程方法调用)
然而,JAVA自己的远程方法调用工具有一定的局限性。毕竟是JAVA语言的最初设计。后来很多框架都是基于RMI的,RMI的用法如下:
对外接口
span style= font-size:12px;公共接口IService扩展远程{
公共字符串queryName(字符串编号)引发RemoteException
}/span服务实现
导入Java . RMI . remote exception;
导入Java . RMI . server . unicastremoteobject;
//服务实现
公共类ServiceImpl扩展UnicastRemoteObject实现IService {
/**
*/
private static final long serialVersionUID=682805210518738166 l;
/**
* @抛出RemoteException
*/
受保护的ServiceImpl()引发RemoteException {
super();
}
/*(非Javadoc)
*
*/
@覆盖
公共字符串queryName(字符串编号)引发RemoteException {
//方法的具体实现
system . out . println( hello no);
返回string . value of(system . current time millis());
}
}RMI客户端
导入Java . RMI . access exception;
导入Java . RMI . notboundexception;
导入Java . RMI . remote exception;
导入Java . RMI . registry . locate registry;
导入Java . RMI . registry . registry;
//RMI客户端
公共类客户端{
公共静态void main(String[] args) {
//注册管理器
注册表registry=null
尝试{
//获取服务注册管理器
registry=locate registry . get registry( 127 . 0 . 0 . 1 ,8088);
//列出所有注册的服务
string[]list=registry . list();
for(String s : list){
system . out . println(s);
}
} catch(远程异常e) {
}
尝试{
//通过名称获取服务
IService server=(IService)registry . lookup( Vince );
//调用远程方法
String result=server.queryName(哈哈哈哈);
//输出调用结果
System.out.println(来自远程的结果: result );
} catch (AccessException e) {
} catch(远程异常e) {
} catch (NotBoundException e) {
}
}
}RMI服务端
导入Java . RMI . remote exception;
导入Java . RMI . registry . locate registry;
导入Java . RMI . registry . registry;
//RMI服务器
公共类服务器{
公共静态void main(String[] args) {
//注册管理器
注册表registry=null
尝试{
//创建服务注册管理器
registry=locate registry . create registry(8088);
} catch(远程异常e) {
}
尝试{
//创建服务
service impl server=new service impl();
//命名服务绑定
registry.rebind(vince ,server);
System.out.println(绑定服务器);
} catch(远程异常e) {
}
}
}服务注册管理器写在服务器里,当然也可以单独拿出来作为服务。在其他框架中,Zookeeper经常被用作注册管理角色。
2、Hessian(基于HTTP的远程方法调用)
基于HTTP协议的传输在性能上并不完美。负载平衡和故障转移依赖于应用程序的负载平衡器。Hessian的使用类似于RMI,区别在于弱化了注册表的作用。通过调用显示的地址,使用HessianProxyFactory根据配置的地址创建一个代理对象,并介绍了Hessian的Jar包。
3、Dubbo(淘宝开源的基于TCP的RPC框架)
基于Netty的高性能RPC框架,由阿里巴巴开源,有以下一般原则:
在认识Dubbo之前,你应该对zookeeper有很深的了解。当你理解了动物园管理员,杜博就没有秘密了。
关于Dubbo的详细描述在淘宝开源里非常详细。Dubbo在工作中的很多制作项目中都有使用,在过程中也发现了很多需要注意的地方,尤其是众多的配置。设置不当会让人烦躁。最好是在现有开源Dubbo的基础上进行定制和优化。
上述rpc框架的细节是什么?更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。