简单实现rpc调用

rpc调用

rpc称远程调用过程,在rpc调用过程中需要解决的几个问题。

  • 代理
  • 协议
  • 序列化

技术选型

  • 协议,我们使用java的socket编程套接字
  • 代理,使用java的动态代理
  • 序列化,使用java的原生的序列化。

rpc衍生出来的问题

  • 注册中心的集群
  • 负载均衡
  • 服务的治理
  • 容灾

这些问题我们不做处理,就是用最简单的bio对rpc远程调用进行简单的封装。

架构模型

  • 注册中心提供服务注册,服务发现,注册中心之间的集群(暂不实现)
  • 客户端启动时,向注册中心注册自己提供的服务。
  • 调用方查询像注册中心查询到当前的服务,在本地进行存储。

在这里插入图片描述

  • 数据结构说明 - 注册中心提供服务注册接口类
public class RegisterServerMesage implements Serializable
{
    /**
     * 提供服务id
     */
    private String ip;
    /**
     * 端口
     */
    private Integer port;
    /**
     * 实现类全限定名
     */
    private String implClassName;
    /**
     * 接口全限定名
     */
    private String interfaceClassName;
}

服务批量注册

public class GeneralHandleData implements Serializable
{

    /**
     * {@link ServerType}
     */
    private Integer type;

    /**
     * 服务注册信息
     */
    private List<RegisterServerMesage> list ;

    /**
     *  返回结果
     */
    private Boolean result;
}
  • 服务调用传输数据结构
public class Invoke implements Serializable
{

    /** 调用方法名称*/
    private String method;

    /** 接口全限定名称*/
    private String interfaceClassName;

    /** 实现类全限定名称*/
    private String implClassName;

    /** 参数列表*/
    private Object[] args;

    /** 参数类型*/
    private Class<?>[] paramsTypes;

    /** 返回结果*/
    private Object result;
}
  • 客户端需要对调用参数进行封装为Invoke对象,并且对接口实行动态代理,封装好参数,请求服务方的ServerSocket即可

  • 服务方提供服务,只需要拿到接口名称查询到实现类的class,进行反射调用。

  • 就简单讲下数据结构吧,详细参考楼主代码。 代码中有调用示例, 依次启动,注册中心 - 两个server - 两个client 即可测试rpc的调用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值