一种基于Java语言的新型RPC传输方法与流程
- 国知局
- 2024-07-31 22:47:56
本发明涉及计算机,尤其涉及一种基于java语言的新型rpc传输方法。
背景技术:
1、rpc(remote procedure call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议;rpc它假定某些协议的存在,例如tpc/http等,为通信程序之间携带信息数据;在osi网络七层模型中,rpc跨越了传输层和应用层,rpc使得开发,包括网络分布式多程序在内的应用程序更加容易;
2、当前java语言开源的rpc框架目前有两大类:一类是采用http协议实现的框架软件,如openfeign;另一类是采用tcp协议实现的框架软件,如dubbo;
3、现有技术中的两类rpc框架分别存在以下弊端:
4、1、http协议中包含大量无用的header信息,数据传输效率低,浪费大量带宽,占用系统资源,http协议是无状态的,每次远程调用都需要建立tcp连接,开销比较大,http协议是应用层协议,相比传输层tcp协议慢一些,安全性低一些;
5、2、tcp协议服务提供者和服务消费者都需要引入公共接口包,强耦合,无法调用http接口,消息不可读,对开发者不友好。
技术实现思路
1、本发明的目的是为了解决现有技术中存在的缺点,而提出的一种基于java语言的新型rpc传输方法。
2、为实现上述目的,本发明采用了如下技术方案:
3、一种基于java语言的新型rpc传输方法,包括如下步骤:
4、s1:服务提供者读取配置文件信息;
5、用户创建配置文件;
6、服务提供者通过配置文件解析工具将配置文件加载到内存中,读取配置文件信息;
7、所述配置文件信息包括注册中心地址、服务名称、端口号、扫描包路径等;
8、所述服务名称与服务一一对应,服务包含http接口类;
9、s2:扫描对应服务下的http接口类,以url为键、类的实例化对象和方法为值,存储到服务信息map中;
10、根据读取的服务名称,通过java反射机制扫描服务名称对应服务下的所有http接口类,获取http接口类的实例化对象和方法;
11、如果http接口类存在类级别的url注解,则获取相应的类级别的url注解值;
12、遍历http接口类下包含的方法,如果遍历的方法存在方法级别的url注解,则获取相应的方法级别的url注解值;
13、将类级别的url注解值、方法级别的url注解值拼接,构建完整的url,即构建的完整的url=类级别的url注解值+方法级别的url注解值;
14、以构建的完整的url为键、类的实例化对象和方法为值,存储到服务信息map中;
15、s3:创建服务端socket;
16、包括如下子步骤:
17、s31:创建自定义tcp协议;
18、用户创建自定义tcp协议;
19、s32:创建服务端socket;
20、用户创建服务端socket,监听端口号的客户请求;客户端请求连接时,服务端socket接受连接并创建一个新的socket来处理与该客户端的通信,并基于自定义tcp协议的规定解析接收到请求中包含的数据;
21、s4:创建注册信息并将注册信息上传到注册中心;
22、包装配置文件信息中的服务名称、ip地址和端口号为注册信息;
23、具体的包装方法为如下:
24、创建注册信息对象,设置注册信息对象的服务名称、端口号和ip地址为配置文件信息中对应的服务名称、端口号和服务所在服务器的ip地址;
25、根据读取的配置文件中的注册信息地址,服务提供者与注册中心建立socket连接,将注册信息通过socket发送到注册中心;
26、s5:服务消费者读取配置文件信息;
27、服务消费者加载配置文件到内存中,读取配置文件信息,获得注册中心地址、负载均衡方式、扫描包路径;
28、所述扫描包路径下自定义rpc注解的接口对应的接口类、接口类包含的方法上的注解与http接口类和方法上的注解一致;且接口方法的参数和返回值类型与http接口类方法的参数和返回值类型一致,而方法名和类名不需要一致。
29、s6:读取注册中心数据;
30、服务消费者根据注册中心地址与注册中心建立socket连接,从注册中心获取所有注册信息;
31、所述注册信息中ip地址和端口号组成相应的list列表;
32、以服务名称为键、ip地址和端口号的list列表为值存储到map中;
33、s7:扫描自定义rpc注解的接口,创建动态代理;
34、通过java反射机制扫描获取的扫描包路径下的自定义rpc注解的接口对应的接口类、接口类包含的方法上的注解;
35、获取自定义rpc注解对应的服务名称,根据此服务名称,从map中获得此服务名称的值,即ip地址和端口号的list列表;
36、创建rpc注解的接口的动态代理实现类,所述动态代理实现类根据负载均衡方式从list列表中选择一个服务提供者的ip地址和端口号,与该服务提供者建立socket连接;
37、通过反射获得接口类和方法上的注解的值,组成url,将url和方法的参数包装成请求信息;
38、根据自定义tcp协议规则将请求信息包装成二进制的消息体;服务消费者代码执行时,将方法参数包装和消息体,并发送给服务提供者;
39、s8:创建请求信息并发送给服务提供者;
40、服务消费者调用接口的动态代理实现类的方法,创建请求信息,将请求信息按照自定义协议包装成二进制的消息体;
41、与服务提供者建立socket连接,通过socket将消息体发送给服务提供者,等待响应信息;
42、所述请求信息包括请求id、url、请求参数;
43、s9:获得请求信息;
44、服务提供者通过socket接收到服务消费者发来的消息体,按照自定义tcp协议,将消息体解包,获得请求信息;
45、所述请求信息包含请求id、url、请求参数;
46、s10:根据请求信息找到对应的代码信息并执行代码;
47、根据请求信息,获取url,并根据url,从服务信息map中找到对应的服务信息;
48、通过java反射机制,传入请求信息中的请求参数,执行服务信息中的方法,得到方法的返回结果;
49、s11:根据返回结果创建响应信息并包装成二进制消息体,返回给服务消费者;
50、所述响应信息格式为:请求id+状态码+返回结果+状态描述;
51、所述状态码包含0和1,如果状态码为0表示服务端执行结果不正常,如果状态码为1表示服务端执行结果正常;
52、所述状态描述是对状态码结果的进一步说明;
53、按照自定义协议,将响应信息包装成二进制的消息体,将消息体通过socket返回给服务消费者;
54、s12:解包消息体,获得响应信息;
55、服务消费者通过socket接收服务提供者返回的消息体,按照自定义协议,将消息体解包为响应信息,从响应信息中获得结果数据,返回结果数据。
56、与现有技术相比,本发明的有益效果为:
57、本发明提出的一种基于java语言的新型rpc传输方法通过扫描http接口代码,生成自定义格式的服务信息;注册信息到注册中心时,不再以传统的类名+方法名的形式注册,而是类注解值+方法注解值的形式,摆脱了对公共接口包的依赖,弱耦合;通过自定义tcp协议来远程调用http接口的代码,实现了传输效率高、传输速度快、安全性高、开销小的优点,且消息体不包含特定语言的代码信息,可以实现跨语言传输;http接口可读可测试,对开发者友好。
本文地址:https://www.jishuxx.com/zhuanli/20240730/194670.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。