rpc框架有哪些功能,rpc框架有哪些 java

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: