一种基于java的跨平台可扩展的RPC框架设计方法技术

技术编号:26596920 阅读:34 留言:0更新日期:2020-12-04 21:18
本发明专利技术涉及一种基于java的跨平台可扩展的RPC框架设计方法,包括以下步骤:以java开发服务端,定义代理接口类和实体类,Controller类继承所述代理接口类并实现,启动RPC Server即完成RPC服务发布;开发客户端,通过启动RPC Client对接所述服务端,调用RPC方法和本地方法一致;所述RPC Server采用Netty作为通信框架,启动TCP服务,同时加载注册的RPC接口类及RPC实现类,将所述RPC Server注册到服务发现中心;RPC Client采用Netty作为通信框架,加载注册的RPC代理接口类,并连接所述服务发现中心,获取订阅的服务列表,进行连接。本发明专利技术能够解决多应用之间互联的根本问题,从而为构建分布式服务调用网络的目标实现框架基础。

【技术实现步骤摘要】
一种基于java的跨平台可扩展的RPC框架设计方法
本专利技术涉及信息
,特别是涉及一种基于java的跨平台可扩展的RPC框架设计方法。
技术介绍
目前,随着互联网技术的不断发展,对一个互联网应用来说,随着功能模块的不断增多,系统逐渐庞大,势必会逐步拆分成多个应用,而每个应用之间会有关联关系,涉及到互相调用,而单个应用考虑到防止单点,又会部署多套,从而这种多对多的关联调用,会形成一个复杂的分布式服务调用网络。随着调用环节的增多,多个服务之间的互联机制,也愈发成为重要的平台建设基础环节之一。同时目前常用的处理方案,有着各种各样的局限性。目前,针对主要是java之间进行互联,兼顾跨平台互联的场景,现有技术中存在以下问题:(1)单一系统问题:随着功能模块增多,系统愈发庞大,单一系统中即便调整一个小功能,就要重新测试发布整个系统,不利于系统的稳定,也增加了运维难度。(2)分布式问题:系统拆分后,多系统之前的互联势必会形成一个复杂的分布式网络,若没有合适的分布式处理策略,则会导致分布式网络任何一个环节出问题,都会导致雪崩效应。(3)性能问题:系统拆分后,多系统之前的互联势必会形成一个复杂的分布式网络,各系统之间的调用从本地调用调整为远程调用,如果不能提供高性能的远程调用,那么势必会降低平台的整体负载。(4)调用跨平台问题:RPCServer发布后,可能调用的客户端是异构语言,此时需能够提供服务。(5)易用性问题:为了满足跨平台,一些常用的方案会要求使用结构化描述语言来定义接口和类,或者会加入繁复的配置。这些都增加了开发复杂度。(6)测试问题:客户端开发中,经常会有测试需求,如果此时RPCServer不在线,则无法进行测试。采用httpjson互联时虽然其可实现跨平台调用,但一方面httpjson采用的是http协议,性能方面有所欠缺。另一方面,调用起来繁琐,无法开箱即用。采用javarmi互联时,虽然java之间调用方便,性能良好,但实现分布式困难,无法跨平台调用。采用webservice互联时,虽然可跨平台调用,但效率低下。采用thrift互联时,虽然可跨平台调用,但需要用特定的结构化描述语言来定义接口和实体,比较繁琐。
技术实现思路
本专利技术提供一种基于java的跨平台可扩展的RPC框架设计方法,能够解决多应用之间互联的根本问题,从而为构建分布式服务调用网络的目标实现框架基础。本专利技术解决其技术问题所采用的技术方案是:提供一种基于java的跨平台可扩展的RPC框架设计方法,包括以下步骤:(1)以java开发服务端,定义代理接口类和实体类,Controller类继承所述代理接口类并实现,启动RPCServer即完成RPC服务发布;(2)开发客户端,通过启动RPCClient对接所述服务端,调用RPC方法和本地方法一致;(3)所述RPCServer采用Netty作为通信框架,启动TCP服务,同时加载注册的RPC接口类及RPC实现类,将所述RPCServer注册到服务发现中心;(4)所述RPCClient采用Netty作为通信框架,加载注册的RPC代理接口类,并连接所述服务发现中心,获取订阅的服务列表,进行连接。所述步骤(1)具体为:先定义服务接口,Controller类层通过继承接口做实现,接着定义RPCServer配置,包括:服务接口类、服务接口实现类、服务名和服务发现中心地址;然后将RPCServer启动方法加入到应用程序启动后执行即可。所述步骤(2)具体为:定义RPCClient配置,包括:代理接口类、服务名和服务发现中心地址;然后将RPCClient启动方法加入到应用程序启动后执行即可。所述步骤(2)中当以java语言开发客户端时,基于RPCClient采用TCP作为传输协议;当以非java语言开发客户端时,采用httpjson方式实现跨平台调用服务。所述步骤(2)中当以java语言开发客户端时,基于RPCClient采用TCP作为传输协议;当以非java语言开发客户端时,采用httpjson方式实现跨平台调用服务。所述步骤(3)中RPCServer的初始化和启动需要加入到SSM项目的启动项中,初始化需要设置服务发现中心的地址、本次发布的服务名和本次发布的服务使用的代理接口类名和实现类名。所述步骤(3)中RPCServer启动后包括以下子步骤:(31)初始化监控模块,所述监控模块用于对每个RPC方法的请求情况进行统计,统计项包含:方法标识、请求总数、请求失败总数和请求总耗时;每分钟会将上一分钟的统计情况,上报到RPC管理平台;(32)启动通信框架,基于异步事件驱动模型来接收RPCClient的请求,遍历注册的代理接口里的每个方法,每个方法会生成一个唯一的methodId,采用字节码方式为每个方法对应的实现方法构建实例,并以methodId为key,方法实例为value,存放到一个map中,用于后续RPCClient请求时做方法响应;(33)将所述RPCServer注册到服务发现中心,其中,服务标识为发布服务的唯一标识,RPCServer的IP端口为具体提供服务的应用的唯一标识,并以此来构建所述服务标识下属的RPCServer列表,当RPCClient以服务标识连接服务发现中心时,能够获取到对应的RPCServer列表用于连接调用;当RPCServer与服务发现中心失联时,服务发现中心就会从服务列表中去除该RPCServer;相应的订阅了对应服务标识的RPCClient就会从请求列表中去除该RPCServer。所述步骤(32)中所述RPCServer接收到RPCClient的请求后,首先RPCServer会进行ip白名单校验,判断来源ip是否可信,当来源ip可信时则会对数据流进行解码,并采用了LengthFieldBasedFrame的方式解决tcp粘包拆包问题;数据流解码完毕后会转换成一个RPCRequest对象,所述RPCRequest对象包含有一个methodId,以及请求数据包;所述RPCRequest对象会被放入业务线程池中执行,执行时会判断若是心跳方法则直接返回,若是业务方法则基于methodId从方法实例map中获取方法实例进行执行,然后输出结果RPCResponse对象,并返回给RPCClient。所述步骤(4)中RPCClient的初始化和启动需要加入到项目的启动项中,初始化需要设置服务发现中心的地址、本次订阅的服务名和本次订阅的服务使用的代理接口类名。所述步骤(4)中RPCClient启动后包括以下子步骤:(41)判断当前是否为mock测试,当为mock测试时,直接将本地mock数据类返回,当为非mock测试时,初始化监控模块,所述监控模块用于对每个RPC方法的请求情况进行统计,统计项包含:方法标识、请求总数、请求失败总数和请求总耗时;每分钟会将上一分钟的统计情况上报到RPC管理平台;(42)初始化异步方法调用超时管理器;(43)初始化连接超本文档来自技高网
...

【技术保护点】
1.一种基于java的跨平台可扩展的RPC框架设计方法,其特征在于,包括以下步骤:/n(1)以java开发服务端,定义代理接口类和实体类,Controller类继承所述代理接口类并实现,启动RPC Server即完成RPC服务发布;/n(2)开发客户端,通过启动RPC Client对接所述服务端,调用RPC方法和本地方法一致;/n(3)所述RPC Server采用Netty作为通信框架,启动TCP服务,同时加载注册的RPC接口类及RPC实现类,将所述RPC Server注册到服务发现中心;/n(4)所述RPC Client采用Netty作为通信框架,加载注册的RPC代理接口类,并连接所述服务发现中心,获取订阅的服务列表,进行连接。/n

【技术特征摘要】
1.一种基于java的跨平台可扩展的RPC框架设计方法,其特征在于,包括以下步骤:
(1)以java开发服务端,定义代理接口类和实体类,Controller类继承所述代理接口类并实现,启动RPCServer即完成RPC服务发布;
(2)开发客户端,通过启动RPCClient对接所述服务端,调用RPC方法和本地方法一致;
(3)所述RPCServer采用Netty作为通信框架,启动TCP服务,同时加载注册的RPC接口类及RPC实现类,将所述RPCServer注册到服务发现中心;
(4)所述RPCClient采用Netty作为通信框架,加载注册的RPC代理接口类,并连接所述服务发现中心,获取订阅的服务列表,进行连接。


2.根据权利要求1所述的基于java的跨平台可扩展的RPC框架设计方法,其特征在于,所述步骤(1)具体为:先定义服务接口,Controller类层通过继承接口做实现,接着定义RPCServer配置,包括:服务接口类、服务接口实现类、服务名和服务发现中心地址;然后将RPCServer启动方法加入到应用程序启动后执行即可。


3.根据权利要求1所述的基于java的跨平台可扩展的RPC框架设计方法,其特征在于,所述步骤(2)具体为:定义RPCClient配置,包括:代理接口类、服务名和服务发现中心地址;然后将RPCClient启动方法加入到应用程序启动后执行即可。


4.根据权利要求1所述的基于java的跨平台可扩展的RPC框架设计方法,其特征在于,所述步骤(2)中当以java语言开发客户端时,基于RPCClient采用TCP作为传输协议;当以非java语言开发客户端时,采用httpjson方式实现跨平台调用服务。


5.根据权利要求1所述的基于java的跨平台可扩展的RPC框架设计方法,其特征在于,所述步骤(3)中RPCServer的初始化和启动需要加入到SSM项目的启动项中,初始化需要设置服务发现中心的地址、本次发布的服务名和本次发布的服务使用的代理接口类名和实现类名。


6.根据权利要求1所述的基于java的跨平台可扩展的RPC框架设计方法,其特征在于,所述步骤(3)中RPCServer启动后包括以下子步骤:
(31)初始化监控模块,所述监控模块用于对每个RPC方法的请求情况进行统计,统计项包含:方法标识、请求总数、请求失败总数和请求总耗时;每分钟会将上一分钟的统计情况,上报到RPC管理平台;
(32)启动通信框架,基于异步事件驱动模型来接收RPCClient的请求,遍历注册的代理接口里的每个方法,每个方法会生成一个唯一的methodId,采用字节码方式为每个方法对应的实现方法构建实例,并以methodId为key,方法实例为value,存放到一个map中,用于后续RPCClient请求时做方法响应;
(33)将所述RPCServer注册到服务发现中心,其中,服务标识为发布服务的唯一标识,RPCServer的IP端口为具体提供服务的应用的唯一标识,并以此来构建所述服务标识下属的RPCServer列表,当RPCClient以服务标识连接服务发现中心时,能够获取到对应的RPCServer列表用于连接调用;当RPCServer与服务发现中心失联时,服务发现中心就会从服务列表中去除该RPCServer;...

【专利技术属性】
技术研发人员:李蔚
申请(专利权)人:上海视云网络科技有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1