SpringBoot整合Netty实现简单的轻量级RPC框架

一,实现目的

实现rpc远程调用的功能,明白调用的流程、原理。

二,rpc框架的概念:

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,
而不需要了解底层网络技术的协议。

三,搭建框架的准备

1,springboot:配质简单,使用方便。
2,zookeeper:主要用来存储服务器的地址和端口号,也可拓展功能动态展示服务上下线。
3,netty:Netty是基于Java NIO的客户端、服务端的网络应用框架,用以快速开发高性能、高可靠 性的网络服务器和客户端程序。
4,Reflections反射包:可以做包扫描,用于获取服务器端的方法、类等。

四,rpc框架启动要完成的事

1,向zookeeper上注册一个临时的节点,注册的形式可以为/注册目录节点/服务名,存储数据为当前服务启动的ip:port(netty服务端的端口,不能与服务启动的端口一样)。
2,通过反射包扫描业务代码路径,获取所有加了@RequestMapping的方法的value值,以及Method对象,并将它们存放到静态map中。
3,启动netty服务端,监听当前服务启动的ip和netty端口号。

五,框架的执行流程

封装一个用于实现客户端调用服务端并返回结果的方法,我这边封装的入参格式为("/服务名/RequestMapping方法名",入参数据,出参类型),为了方便出入参都使用的JSONObject格式。
方法具体流程(简化了netty的调用流程):
1,调用该方法时,先连接zookeeper,通过入参的服务名,获取该服务名节点下存放的数据,服务的ip和端口。
2,获取到ip和端口后,将请求的RequestMapping方法名和入参数据重新封装,并传入netty客户端,启动netty客户端,将数据编码,发送给netty服务端。
3,服务端解码数据后,通过RequestMapping方法名,匹配到在服务启动时封装的map的Method类。
4,通过反射调用方法,并返回执行结果给服务端。
5,服务端编码后,将数据返回给客户端。
6,客户端解码后,将数据返回给调用方法。

六,调用测试

可以搭建两个工程,进行互相访问测试;也可以在一个工程里,通过两个方法进行远端调用测试。

你可能感兴趣的:(SpringBoot整合Netty实现简单的轻量级RPC框架)