服务间通信的方式,RPC、RMI的理解

服务间通信 的方式

  • 同步调用:
  1. Dubbo RPC的方式
    底层基于netty实现 基于TCP建立的长连接 BIO NIO只是一种网络通信方式
    BIO 为每一个连接创建一个线程 会堵塞
    NIO 一个线程服务多个连接 有弊端 当连接太多 性能会下降 Netty 封装了NIO 在他的基础上 添加了主从处理组 BossGroup WorkerGroup 编程模型 Reator 反应堆思想 NIO Netty是一种实现

  2. RPC其他方式
    httpClient
    okHttp
    SpringCloud restful http的形式 短连接 RestTemplate
    Feign

    性能:dubbo>springCloud

  • 异步调用:MQ 无需等待执行方的结果

RPC、RMI的理解

RPC:在本地调用远程的函数,远程过程调用,可以跨语言实现 httpClient。
RMI:远程方法调用,java中用于实现RPC的一种机制,RPC的java版本,是J2EE的网络调用机制,跨JVM调用对象的方法,面向对象的思维方式。

直接或间接实现接口 java.rmi.Remote 成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。

远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为“存根”,而服务器端本身已存在的远程对象则称之为“骨架”。其实此时的存根是客户端的一个代理,用于与服务器端的通信,而骨架也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程方法来响应客户端的请求。

如何理解RPC

远程过程调用
RPC要求在调用方中放置被调用的方法的接口。调用方只要调用了这些接口,就相当于调用了被调用方的实际方法,十分易用。于是,调用方可以像调用内部接口一样调用远程的方法,而不用封装参数名和参数值等操作。

包含

  1. 动态代理,封装调用细节。
  2. 序列化与反序列化,数据传输与接收。
  3. 通信,可以选择七层的http,四层的tcp/udp。
  4. 异常处理等。

首先,调用方调用的是接口,必须得为接口构造一个假的实现。显然,要使用动态代理。这样,调用方的调用就被动态代理接收到了。
第二,动态代理接收到调用后,应该想办法调用远程的实际实现。这包括下面几步:

  • 识别具体要调用的远程方法的IP、端口
  • 将调用方法的入参进行序列化
  • 通过通信将请求发送到远程的方法中
    这样,远程的服务就接收到了调用方的请求。它应该:
  • 反序列化各个调用参数
  • 定位到实际要调用的方法,然后输入参数,执行方法
  • 按照调用的路径返回调用的结果
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值