使用springboot,http实现简单的RPC协议框架

一、 RPC协议的作用

RPC(Remote Procedure Call),远程过程调用,就是像调用本服务中的函数一样去调用别的服务中的函数。

二、RPC与HTTP的区别

远程过程调用这一功能也可用HTTP协议实现,例如服务B暴露Restful接口,然后让服务A调用它的接口。基于Restful的调用方式因为可读性好(服务B暴露出的是Restful接口,可读性当然好)而且HTTP请求可以通过各种防火墙,因此非常不错。

然而,基于Restful的远程过程调用有着明显的缺点,首先是有用信息占比少,毕竟HTTP工作在第七层,包含了大量的HTTP头等信息。其次是效率低,要封装各种参数名和参数值。当存在大量的服务间调用时,这些缺点变得更为突出。

服务A调用服务B的过程是应用间的内部过程,牺牲可读性提升效率、易用性是可取的。而RPC就是为了提高服务间调用的效率而产生的。RPC要求在调用方中放置被调用的方法的接口,调用方调用接口内部的一个方法,但是被RPC框架偷梁换柱为远程的一个方法。服务之间的通信数据可读性不需要好,只需要RPC框架能读懂即可,因此效率可以更高。

三、实现一个简单的RPC客户端和服务端

HTTP协议使用TCP协议通信。RPC协议可使用UDP协议或TCP协议通信,当然也可以使用HTTP协议通信。例如下面的示例中,为了保证实现最简单,就用了HTTP进行通信。代码地址

1. 新建Springboot项目,访问本服务中的方法

  • 新建一个maven工程,并添加一个名为rpcclient的springboot模块,里面有UserController.java类,UserService.java接口,UserServiceImpl.java类,User.java类,RpcclientApplication.java
  • UserServiceImpl类使用@Service注解,定义为一个bean,交由Sping容器管理。
//UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {
   

    @Override
    //public User getUserInfo(int id) {
   
        //User user = setUser(id);
        //return user;
    //}
    public String getUserInfo(int id) {
   
        User user = setUser(id)
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值