简单介绍 RPC 框架
RPC 框架
在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在 Java 领域中有很多可以实现远程通讯的技术,例如:RMI、Hessian、SOAP、ESB 和 JMS 等。其基本原理是基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 TCP、UDP 等,TCP、UDP 都是基于 Socket 概念上为某类应用场景而扩展出来的传输协议。
RPC 概念
全称 remote procedure call,即远程过程调用。借助 RPC 可以做到像本地调用一样调用远程服务。RPC 并不是一个具体的技术,而是只整个网络远程调用过程
。
sequenceDiagram
方法 A - 方法 B: 本地调用
方法 B -- 方法 A: 结果返回
一个完整的 RPC 框架里边包含了四个核心的组件,分别是 Client,Client Stub,Server 以及 Server Stub,这个 Stub 可以理解为存根。
- 客户端(Client),服务的调用方。
- 客户端存根(Client Stub),存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
- 服务端(Server),真正的服务提供者。
- 服务端存根(Server Stub),接收客户端发送过来的消息,将消息解包,并调用本地的方法。
RMI
Java RMI,即远程方法调用 (Remote Method Invocation),一种用于实现远程调用(RPC-Remote procedure call)的 Java API,能直接传输序列化后的 Java 对象。RMI 的实现依赖于 Java 虚拟机,因此只能支持一个 JVM 到另一个 JVM 的调用。
代码示例使用
需求分析
- 服务端提供 ID 查询用户的方法
- 客户端调用服务端方法,并返回用户对象
- 要求使用 RMI 进行远程通讯
代码实现
服务端
/*** 服务端*/
public class RMIServer {public static void main(String[] args) {try {//1.注册Registry实例. 绑定端口Registry registry = LocateRegistry.createRegistry(9998);//2.创建远程对象IUserService userService = new UserServiceImpl();//3.将远程对象注册到RMI服务器上即(服务端注册表上)registry.rebind("userService", userService);System.out.println("---RMI服务端启动成功----");} catch (RemoteException e) {e.printStackTrace();}}
}
客户端
/*** 客户端*/
public class RMIClient {public static void main(String[] args) throws RemoteException, NotBoundException {//1.获取Registry实例Registry registry = LocateRegistry.getRegistry("127.0.0.1", 9998);//2.通过Registry实例查找远程对象IUserService userService = (IUserService) registry.lookup("userService");User user = userService.getByUserId(2);System.out.println(user.getId() + "----" + user.getName());}
}
接口及其实现类
public interface IUserService extends Remote {User getByUserId(int id) throws RemoteException;
}public class UserServiceImpl extends UnicastRemoteObject implements IUserService {Map<Object, User> userMap = new HashMap();public UserServiceImpl() throws RemoteException {super();User user1 = new User();user1.setId(1);user1.setName("张三");User user2 = new User();user2.setId(2);user2.setName("李四");userMap.put(user1.getId(), user1);userMap.put(user2.getId(), user2);}@Overridepublic User getByUserId(int id) throws RemoteException {return userMap.get(id);}
}
Netty 实现 RPC
需求分析
使用 Netty 实现一个简单的 RPC 框架,消费者和提供者约定接口和协议,消费者远程调用提供者的服务。
- 创建一个接口,定义抽象方法。用于消费者和提供者之间的约定;
- 创建一个提供者,该类需要监听消费者的请求,并按照约定返回数据;
- 创建一个消费者,该类需要透明的调用自己不存在的方法,内部需要使用 Netty 进行数据通信
- 提供者与消费者数据传输使用 json 字符串数据格式
- 提供者使用 Netty 集成 Spring Boot 环境实现
代码实现
代码库:https://gitee.com/teaegg/netty-rpc.git
简单介绍 RPC 框架相关推荐
- 最简单的RPC框架实现
RPC架构 RPC的全称是 Remote Procedure Call,它是一种进程间通信方式.允许像调用本地服务一样调用远程服务,它的具体实现方式可以不同,例如Spring 的 HTTP Invok ...
- Java实现简单的RPC框架
一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...
- IOS学习之 网络编程(10)--简单介绍ASI框架的使用
转载自 http://www.cnblogs.com/wendingding/p/3950027.html 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是A ...
- 小司机带你撸一个简单的RPC框架
随着业务的增长,有时候普通的单一型架构不再能满足我们的需求,这就诞生了RPC框架,经过多年的发展,我们可以看到市面上可用性高的开源RPC框架还是比较多的,比如说:Hessian,Dubbo等,这些框架 ...
- jsonrpc php使用,php实现的一个简单json rpc框架实例
json rpc 是一种以json为消息格式的远程调用服务,它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列的实现.这种远程过程调用可以使用http作为传输 ...
- 简单说说 RPC 框架,你 悟到了吗?
愿打开此篇对你有所帮助. 网上讲的不明不白的居多,我来试试,争取让做过后端开发项目的学生能看明白,基础再往下我就没办法了. 如果有大佬,可以帮我看看我理解的是不是有错. 最基本的 CS 框架先说一下是 ...
- 前端可视化组件库-Apache ECharts简单介绍vue框架使用eCharts例子
eCharts是一个基于 JavaScript 的开源可视化图表库. 实现集成了前端可视化的多种手段. 官网链接:ECharts官网 初学者建议去官网看看起步的内容,另外博主也是今天刚学的噢,写得不好 ...
- 如何手写一个简单的RPC框架
http://www.czhenblog.cn/article?articleId=29
- 使用Akka实现简单RPC框架
使用Akka实现简单RPC框架 最近简单看了看Flink的RPC通讯相关的源码,它是通过Akka实现的,为了更好的阅读理解代码,又大体看了看Akka相关的知识.这篇文章主要记录了如果使用Akka来实现 ...
最新文章
- 如何与风险投资商打交道
- Java并发编程实战_一线大厂架构师整理:java并发编程实践教程
- 使用parted命令对硬盘进行操作
- 我是一只IT小小鸟读书笔记
- win7系统怎样打开音频服务器,win7系统打开音频管理器的具体教程
- Android启动后icon应用图标不能显示的可能问题
- 视频监控系统中的平台服务器,【视频监控主机 网络视频集中管理平台服务器】 - 太平洋安防网...
- HashMap 和 Hashtable 的同和不同
- 一些前端常用工具的生命周期
- 以中划线开头正则表达式_正则表达式 汉字、数字、字母、横杠
- Matlab rand randn randint
- LCA Tarjan
- Unity运行失败,Unsafe code may only appear if compiling with /unsafe
- R语言实战之基本统计分析
- 10 本 Linux PDF 书籍免费分享
- 跳跃游戏2(求最少跳跃次数)Python解法
- 串口的使用–蓝牙模块
- 安装bugzilla
- 金融业务知识(2):股票交易的基本流程
- 关于电商秒杀系统中防超卖处理方案简述,统统给你解决!
热门文章
- Unity实战问题-双击脚本打不开的原因和解决方法
- 关于平方根运算的算法
- English Learning - L3 Lesson2 VOA-Color 译文
- 齐晖医药冲刺上交所:拟募资7亿 为刘祥宜与朱建民夫妻店
- js运算符及其优先级
- HTTP篇-----HTTP的基础知识
- libsvm matlab 3.18下载,libsvm-3.17 最新的从官方网站下载的 工具箱 matlab 238万源代码下载- www.pudn.com...
- RegularExpressionValidator控件
- CLSID与ProgID转换
- 应用竞赛树结构模拟实现外排序(C++实现)