一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

远程过程调用方法、装置、设备及可读存储介质与流程

2022-11-30 11:10:13 来源:中国专利 TAG:


1.本发明涉及电信网管领域,尤其涉及一种远程过程调用方法、装置、设备及可读存储介质。


背景技术:

2.rpc(remote procedure call)远程过程调用,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。例如,一个应用部署在a服务器上,想要调用b服务器上应用提供的函数/方法。由于调用方与被调用方不在一个内存空间,此时不能直接调用,而需要通过网络来表达调用的语义和传达调用的数据,这种方式就是rpc。
3.其中,rpc的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,rpc框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。目前,rpc在分布式系统中的系统环境建设和应用程序设计中都有着广泛的应用。业界主流的rpc框架也有较多,如阿里巴巴的dubbo,facebook的thrift,谷歌的grpc,zeroc的ice等等。
4.然而现有基于rpc接口进行远程过程调用时,存在下述问题:
5.(1)适应性限制:调用方与被调方采用不同的rpc框架时,由于不同的rpc框架的传输协议、消息模型存在差异,因此调用方无法直接调用被调方,而必须引入被调方所采用框架的客户端后才可以对被调方的相应服务执行调用,如图1,客户必须引入服务端rpc框架的rpc client,才能基于rpc通信协议向服务端的rpc server请求服务;
6.(2)兼容性限制:调用方与被调方采用相同的rpc框架时,由于rpc框架会根据协议文件,生成对应语言的消息模型,在应用层中直接操作该模型的属性和方法。一旦调用方与被调方有一方消息模型升级,另一方消息模型不升级,会导致调用方所采用的客户端与被调方所采用的客户端(相对于调用方,此客户端即服务端)不匹配,此时在应用层中对消息模型进行解析时会解析失败而导致无法兼容。
7.(3)语言限制:若被调方所采用的rpc框架支持语言1、2、3、4,而刚好调用方采用的是语言5,则调用方无法通过上述相同的rpc框架对被调方的相应服务执行调用。


技术实现要素:

8.本发明的主要目的在于提供一种远程过程调用方法、装置、设备及可读存储介质,旨在解决现有基于rpc框架进行远程过程调用时,存在适应性、兼容性以及语言限制的技术问题。
9.第一方面,本发明提供一种远程过程调用方法,所述远程过程调用方法包括以下步骤:
10.当收到客户基于http协议向web服务触发的调用请求时,提取所述调用请求对应的第一入参,所述第一入参包括服务端对应的rpc接口名称和rpc接口入参,所述第一入参为json格式字符串;
11.将所述第一入参从json格式字符串转换为第一rpc协议模型;
12.基于rpc接口名称与第一rpc协议模型,使用对应rpc框架的客户端调用服务端对应的rpc服务,得到包括出参和返回值的第二rpc协议模型;
13.将所述第二rpc协议模型转换成json格式字符串,返回给web服务,再基于http协议返回给客户。
14.可选的,所述将所述第一入参从json格式字符串转换为第一rpc协议模型的步骤包括:
15.将所述第一入参从json格式字符串转换成第一通用模型;
16.将第一通用模型中的rpc接口入参转换为第一rpc协议模型。
17.可选的,在所述当收到客户基于http协议向web服务触发的调用请求时,提取所述调用请求对应的第一入参的步骤之前,还包括:
18.基于预设文件规范编写各个rpc框架对应的rpc协议文件;
19.基于rpc框架确定对应的rpc协议解析器;
20.基于rpc协议解析器解析所述rpc框架对应的rpc协议文件,并基于解析结果生成通用协议文件,其中,所述通用协议文件用于记录所述rpc框架对应的rpc接口,对应的rpc协议模型的入参、出参和返回值数据类型及属性定义。
21.可选的,所述将所述第二rpc协议模型转换成json格式字符串的步骤包括:
22.将所述包括出参和返回值的第二rpc协议模型转换为第二通用模型;
23.将所述第二通用模型转换成json格式字符串。
24.可选的,所述将所述包括出参和返回值的第二rpc协议模型转换为第二通用模型的步骤包括:
25.创建通用模型;
26.基于通用协议文件,识别得到第二rpc协议模型中的出参和返回值数据类型和属性定义;
27.基于所述出参和返回值数据类型的转换规则,将所述第二rpc协议模型中的出参和返回值转换为map结构;
28.将所述map结构的出参和返回值填充至通用模型中的对应字段,得到第二通用模型。
29.可选的,所述web服务基于java的spring boot框架实现,对外提供基于http协议的post接口,所述post接口的入参和出参采用通用模型对应的json格式字符串。
30.第二方面,本发明还提供一种远程过程调用装置,所述远程过程调用装置包括:
31.提取模块,用于当收到客户基于http协议向web服务触发的调用请求时,提取所述调用请求对应的第一入参,所述第一入参包括服务端对应的rpc接口名称和rpc接口入参,所述第一入参为json格式字符串;
32.第一转换模块,用于将所述第一入参从json格式字符串转换为第一rpc协议模型;
33.调用模块,用于基于rpc接口名称与第一rpc协议模型,使用对应rpc框架的客户端调用服务端对应的rpc服务,得到包括出参和返回值的第二rpc协议模型;
34.第二转换模块,用于将所述第二rpc协议模型转换成json格式字符串,返回给web服务,再基于http协议返回给客户。
35.可选的,所述第一转换模块,具体用于:
36.将所述第一入参从json格式字符串转换成第一通用模型;
37.将第一通用模型中的rpc接口入参转换为第一rpc协议模型。
38.可选的,所述远程过程调用装置,还包括生成模块,用于:
39.基于预设文件规范编写各个rpc框架对应的rpc协议文件;
40.基于rpc框架确定对应的rpc协议解析器;
41.基于rpc协议解析器解析所述rpc框架对应的rpc协议文件,并基于解析结果生成通用协议文件,其中,所述通用协议文件用于记录所述rpc框架对应的rpc接口,对应的rpc协议模型的入参、出参和返回值数据类型及属性定义。
42.可选的,所述第二转换模块,具体用于:
43.将所述包括出参和返回值的第二rpc协议模型转换为第二通用模型;
44.将所述第二通用模型转换成json格式字符串。
45.可选的,所述第二转换模块,还具体用于:
46.创建通用模型;
47.基于通用协议文件,识别得到第二rpc协议模型中的出参和返回值数据类型和属性定义;
48.基于所述出参和返回值数据类型的转换规则,将所述第二rpc协议模型中的出参和返回值转换为map结构;
49.将所述map结构的出参和返回值填充至通用模型中的对应字段,得到第二通用模型。
50.可选的,所述web服务基于java的spring boot框架实现,对外提供基于http协议的post接口,所述post接口的入参和出参采用通用模型对应的json格式字符串。
51.第三方面,本发明还提供一种远程过程调用设备,所述远程过程调用设备包括处理器、存储器、以及存储在所述存储器上并可被所述处理器执行的远程过程调用程序,其中所述远程过程调用程序被所述处理器执行时,实现如上述所述的远程过程调用方法的步骤。
52.第四方面,本发明还提供一种可读存储介质,所述可读存储介质上存储有远程过程调用程序,其中所述远程过程调用程序被处理器执行时,实现如上述所述的远程过程调用方法的步骤。
53.本发明提供一种远程过程调用方法、装置、设备及可读存储介质,远程过程调用方法包括:当收到客户基于http协议向web服务触发的调用请求时,提取所述调用请求对应的第一入参,所述第一入参包括服务端对应的rpc接口名称和rpc接口入参,所述第一入参为json格式字符串;将所述第一入参从json格式字符串转换为第一rpc协议模型;基于rpc接口名称与第一rpc协议模型,使用对应rpc框架的客户端调用服务端对应的rpc服务,得到包括出参和返回值的第二rpc协议模型;将所述第二rpc协议模型转换成json格式字符串,返回给web服务,再基于http协议返回给客户。本发明在原始rpc服务的基础上提供一层通用代理,将rpc接口转换成http接口对外提供服务,可不再受限于rpc框架的语言限制和模型限制。
附图说明
54.图1为背景技术中现有方案远程过程调用方法一实施例的流程示意图;
55.图2为本发明实施例方案中涉及的远程过程调用设备的硬件结构示意图;
56.图3为本发明远程过程调用方法一实施例的流程示意图;
57.图4为本发明远程过程调用方法另一实施例的流程示意图;
58.图5为本发明远程过程调用装置一实施例的功能模块示意图。
59.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
60.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
61.第一方面,本发明实施例提供一种远程过程调用设备。
62.参照图2,图2为本发明实施例方案中涉及的远程过程调用设备的硬件结构示意图。本发明实施例中,远程过程调用设备可以包括处理器1001(例如中央处理器central processingunit,cpu),通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信;用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard);网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真wireless-fidelity,wi-fi接口);存储器1005可以是高速随机存取存储器(random access memory,ram),也可以是稳定的存储器(non-volatile memory),例如磁盘存储器,存储器1005可选的还可以是独立于前述处理器1001的存储装置。本领域技术人员可以理解,图2中示出的硬件结构并不构成对本发明的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
63.继续参照图2,图2中作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及远程过程调用程序。其中,处理器1001可以调用存储器1005中存储的远程过程调用程序,并执行本发明实施例提供的远程过程调用方法。
64.第二方面,本发明实施例提供了一种远程过程调用方法。
65.参照图3,图3为本发明远程过程调用方法一实施例的流程示意图。
66.在本发明远程过程调用方法一实施例中,所述远程过程调用方法包括:
67.步骤s10,当收到客户基于http协议向web服务触发的调用请求时,提取所述调用请求对应的第一入参,所述第一入参包括服务端对应的rpc接口名称和rpc接口入参,所述第一入参为json格式字符串;
68.本实施例中,基于上述背景技术中现有方案存在的问题,考虑到若能在原始rpc服务的基础上提供一层通用代理,即可使得客户端能采用统一的方式调用不同的rpc框架下服务端的服务,不再受限于rpc框架的语言限制和模型限制。
69.因此本实施例方案,在原始rpc服务的基础上提供一层通用代理,将rpc接口转换成http接口对外提供服务,增加传输协议的转换和消息模型转换的过程,采用统一的http接口调用以屏蔽传输协议的差异,采用json格式字符串传递消息以屏蔽消息模型的差异,使得客户能采用统一的方式调用不同的rpc框架下服务端的对应服务,不再受限于rpc框架的语言限制和模型限制。
70.当客户(本地系统)调用其他系统的服务时,只需要采用统一的http接口调用,无
需再引入不同的rpc客户端。其中,当客户需要调用服务端时,可以通过http协议向web服务请求调用服务端,调用路径例如“http://ip:port/call”。当收到客户基于http协议向web服务触发的调用请求时,则可以提取上述调用请求对应的第一入参。其中,上述第一入参为json格式字符串,包括了服务端(客户所需要调用的)对应的rpc接口名称和rpc接口入参,而rpc接口入参包括了服务端中需要被调用的函数/方法名、参数类型、参数值等。
71.进一步,一实施例中,在步骤s10之前,还包括:
72.基于预设文件规范编写各个rpc框架对应的rpc协议文件;
73.基于rpc框架确定对应的rpc协议解析器;
74.基于rpc协议解析器解析所述rpc框架对应的rpc协议文件,并基于解析结果生成通用协议文件,其中,所述通用协议文件用于记录所述rpc框架对应的rpc接口,对应的rpc协议模型的入参、出参和返回值数据类型及属性定义。
75.本实施例中,考虑到传统rpc调用中,即使客户端与服务端采用同一rpc框架,在基于对应rpc框架的消息模型交互调用语义与调用数据时,也必须保证消息模型是强相关的、完全匹配的。若客户端与服务端中一端对应的消息模型升级,一端对应的消息模型不升级,则两端对应的消息模型就会不匹配,而无法解析出调用语义与调用数据,导致远程过程调用失败。因此传统rpc调用时,客户端与服务端对应的消息模型必须一对一。
76.本实施例方案,不直接使用各个rpc框架对应的消息模型来交互调用语义与调用数据,而是将消息模型转换为json格式字符串来传递数据,json格式字符串传输数据天然具备兼容性特性。其中,rpc框架通过rpc协议文件定义rpc接口和消息模型,即rpc框架是根据rpc协议文件,生成对应语言的消息模型的。因此若需要将消息模型转换成json格式字符串,则需要解析对应的rpc协议文件。此时,为了便于识别rpc协议文件中接口定义、接口入参与字段类型等消息模型定义,需要制定rpc协议文件编写规范,增加约束和标准。在此基础上,再基于预设文件规范编写各个rpc框架对应的rpc协议文件。其中,预设文件规范包括:
77.(1)文件编码必须是utf-8,在编译时,编译脚本会通过rpc框架自带的工具将rpc协议文件生成.cpp和.java文件,若rpc协议文件不是utf-8编码,且包含中文注释,生成java文件会乱码,最终导致编译报错;
78.(2)接口名称必须是rpc关键字,通过使用const string常量定义接口名称,常量名称和常量值须包含“rpc”,以区分普通常量和接口名称定义,例如const string rpcadjusttunnel=“rpc_adjust_tunnel”;
79.(3)方法入参通过@param入参字段声明,通过consot定义的方法,需要在注释中分多行描述其各个入参的参数类型和含义。格式为:
80.@param入参:参数类型(rpc协议模型或基本类型)key:参数key(基本类型有效,复杂类型时值同参数类型)参数含义,或者@param入参:无,如:
81.//修改tunnel(两个入参)
82.//@param入参:intkey:tunnelidtunnel编号
83.//@param入参:tunneladjustparamice tunnel路由调整参数
84.const string rpcadjusttunnel=“rpc_adjust_tunnel”;
85.(4)方法出参通过@param出参字段声明,通过consot定义的方法,需要在注释中分
多行描述其各个出参的参数类型和含义,含义复用为参数key识别。若是基础数据类型,参考java语言基本模型定义。格式为:
86.@param出参:参数类型key:参数key(基本类型有效,复杂类型时值同参数类型)参数含义,或者@param出参:无,如:
87.//修改tunnel(两个入参,一个出参)
88.//@param入参:intkey:tunnelidtunnel编号
89.//@param入参:tunneladjustparamice tunnel路由调整参数
90.//@param出参:tunnelice调整后的tunnel信息
91.const string rpcadjusttunnel=“rpc_adjust_tunnel”;
92.(5)方法返回值通过@return字段声明,通过consot定义的方法,需要在注释中分多行描述其各个出参的参数类型和含义,含义复用为参数key识别。若是基础数据类型,参考java语言基本模型定义。格式为:
93.@param出参:参数类型key:参数key(基本类型有效,复杂类型时值同参数类型)参数含义,或者@param出参:无,如:
94.//修改tunnel(两个入参,一个出参)
95.//@param入参:intkey:tunnelidtunnel编号
96.//@param入参:tunneladjustparamice tunnel路由调整参数
97.//@param出参:tunnelice调整后的tunnel信息
98.//@returnrpc_return_code返回错误码信息
99.const string rpcadjusttunnel=“rpc_adjust_tunnel”。
100.此外,再基于rpc框架确定对应的rpc协议解析器,该rpc协议解析器会基于上述预设文件规范解析rpc框架的rpc协议文件,生成对应的通用协议文件。其中,由于rpc框架不同,rpc协议文件也会不同,因此不同rpc框架下的协议解析器是特有的。
101.所生成的通用协议文件用于记录所述rpc框架对应的rpc接口,对应的rpc协议模型的入参、出参和返回值数据类型及属性定义,可以屏蔽不同rpc协议文件的差异性。同时,上述通用协议文件可供后续将消息模型与json格式字符串进行相互转换时使用,使得客户端不感知具体的rpc消息模型,以做到一个客户端可以与多个版本的服务端对应起来。
102.其中,通用协议文件如funtion.json采用utf-8编码格式存储json字符串。定义如下:
103.[
[0104]
{
[0105]“functionname”:”接口定义,预设文件规范中定义”,
[0106]“desc”:”接口描述”,
[0107]“inparams”:[“入参1类型和key,预设文件规范中定义”,”入参2类型和key”],
[0108]“outparams”:[“出参1类型和key,预设文件规范中定义”,”出参2类型和key”],
[0109]“returnvalue”:[“返回值类型,预设文件规范中定义”]
[0110]
}
[0111]
]
[0112]
例如:
[0113]
[
[0114]
{
[0115]“functionname”:”rpc_adjust_tunnel”,
[0116]“desc”:”修改tunnel”,
[0117]“inparams”:[“int:tunnelid”,”tunneladjustparamice”],
[0118]“outparams”:[“tunnelice”],
[0119]“returnvalue”:[“rpc_return_code”]
[0120]
}
[0121]
]
[0122]
其中,入参、出参与返回值对应的数据类型包括rpc协议定义的复杂消息模型以及基本数据类型。参照java语言基本模型定义,通用基本模型定义如:boolean,boolean[]:bool类型及复数;byte,byte[]:字节类型及复数;short,short[]:短整型类型及复数;int,int[]:整型类型及复数;long,long[]:长整型类型及复数;float,float[]:浮点型类型及复数;double,double[]:浮点型类型及复数;string,string[]:字符串类型类型及复数。
[0123]
步骤s20,将所述第一入参从json格式字符串转换为第一rpc协议模型;
[0124]
本实施例中,由于是将各个rpc框架对应的消息模型转换为json格式字符串来传递数据,使得客户端不感知具体的rpc消息模型,以做到一个客户端可以与多个版本的服务端对应起来的。而最后执行rpc调用时,采用的还是原始rpc调用的方式,所以在基于统一的http接口触发调用请求后,需要将调用请求对应的第一入参从json格式字符串转换为第一rpc协议模型,以便于基于第一rpc协议模型执行对应rpc框架的rpc调用服务。
[0125]
进一步,一实施例中,步骤s20包括:
[0126]
将所述第一入参从json格式字符串转换成第一通用模型;
[0127]
将第一通用模型中的rpc接口入参转换为第一rpc协议模型。
[0128]
本实施例中,第一入参对应的json格式字符串不是rpc协议模型对应的json字符串,因此需要先基于json解析器将第一入参从json格式字符串转换为第一通用模型。其中,第一通用模型即为所需要调用的rpc接口入参对应的通用模型,而通用模型不再具体定义具体对象模型。其中,通用模型中的key为参数属性名,value为参数值,均为字符串类型。入参\出参\返回值的数据类型为基本类型的,直接转换字符串表示;入参\出参\返回值的数据类型为复杂类型的,使用map形式的json字符串表示。如:
[0129]
class commonbean{
[0130]
//接口名称
[0131]
string functionname=“rpc_adjust_tunnel”;
[0132]
//入参列表
[0133]
list《map《stirng,string》》inparams=[《”tunnel”:”《{”id”:”1”,”desc”:”修改”》”》];
[0134]
//出参列表
[0135]
list《map《stirng,string》》outparams;
[0136]
//返回值
[0137]
map《stirng,string》returnvalue;
[0138]
}
[0139]
在得到上述第一通用模型之后,再从第一通用模型的map结构中,提取每个入参的字符串表示,之后交由rpc协议解析器转换成第一rpc协议模型。具体地,可以通过java反射方式,实现rpc协议模型和map结构的相互转换,map结构的key和rpc协议模型的字段名称对应。其中,上述第一rpc协议模型即对应rpc框架的消息模型,包括所需要调用的rpc接口入参。
[0140]
步骤s30,基于rpc接口名称与第一rpc协议模型,使用对应rpc框架的客户端调用服务端对应的rpc服务,得到包括出参和返回值的第二rpc协议模型;
[0141]
本实施例中,在确定了rpc接口名称与第一rpc协议模型之后,再基于rpc接口名称与第一rpc协议模型使用对应rpc框架的客户端调用服务端对应的rpc服务,即可得到包括出参和返回值的第二rpc协议模型。
[0142]
步骤s40,将所述第二rpc协议模型转换成json格式字符串,返回给web服务,再基于http协议返回给客户。
[0143]
本实施例中,当得到包括出参和返回值的第二rpc协议模型之后,需要将出参和返回值返回给客户,即完成整个调用过程,其中,将包括出参和返回值的第二rpc协议模型返回给客户,需要再经过一次模型转换与协议转换的过程。即需要先将第二rpc协议模型转换成json格式字符串,返回给web服务,再基于http协议返回给客户。
[0144]
进一步,一实施例中,所述将所述第二rpc协议模型转换成json格式字符串的步骤包括:
[0145]
将所述包括出参和返回值的第二rpc协议模型转换为第二通用模型;
[0146]
将所述第二通用模型转换成json格式字符串。
[0147]
本实施例中,由于可以通过java反射方式,实现rpc协议模型和map结构的相互转换,map结构的key和rpc协议模型的字段名称对应。因此,将第二rpc协议模型转换成json格式字符串的过程中,需要先将上述得到的包括出参和返回值的第二rpc协议模型转换为第二通用模型。并因通用模型中的参数都是map《string,string》形式的字符串表示,因此可以在此基础上,使用json解析器将上述第二通用模型转换成json格式字符串进行传递。其中,json格式字符串例如:
[0148]“{
[0149]“functionname”:“rpc_adjust_tunnel”,
[0150]“outparams”:[《”tunnel”:”《{”id”:”1”,”name”:”第一条业务”,”attr”:”{”desc”:”修改”,”createuser”:
””
}”}》”》];
[0151]“returnvalue“:”《”code”:”0”,“msg”:”success”》”;
[0152]
}”[0153]
进一步,一实施例中,参照图4,所述将所述包括出参和返回值的第二rpc协议模型转换为第二通用模型的步骤包括:
[0154]
步骤s1,创建通用模型;
[0155]
步骤s2,基于通用协议文件,识别得到第二rpc协议模型中的出参和返回值数据类型和属性定义;
[0156]
步骤s3,基于所述出参和返回值数据类型的转换规则,将所述第二rpc协议模型中的出参和返回值转换为map结构;
[0157]
步骤s4,将所述map结构的出参和返回值填充至通用模型中的对应字段,得到第二通用模型。
[0158]
本实施例中,具体地,将所述第二rpc协议模型转换成json格式字符串的步骤包括:创建通用模型,通用模型中的参数都是map《string,string》形式表示。基于通用协议文件,识别得到第二rpc协议模型中的出参和返回值数据类型和key属性定义。其中,数据类型包括基本类型与复杂类型,每一数据类型有其对应的转换规则。
[0159]
若是数据类型为基本类型时,按照对应字符串转换,转换为string时,调用string.valueof(基本类型)方法,将基本类型转换为《string,string》的map结构,填充到outparams和returnvalue字段。
[0160]
若是数据类型为复杂类型时,将其中的基本类型转换为《string,string》的map结构,填充到outparams和returnvalue字段,其中值为复杂类型的map映射结构字符串,如:
[0161]
《”tunnel”:”《{“id”:
””
,”name”:
””
,”attr”:”{“desc”:
””
,”createuser”:
””
}”}》”》;
[0162]
而其对应的第二rpc协议模型为:tunnelice
[0163]
class tunnelice{
[0164]
int id;//编号
[0165]
string name;//名称
[0166]
attr attr;//属性
[0167]
}
[0168]
classattr{
[0169]
string desc;//描述
[0170]
string createuser;//创建用户
[0171]
}
[0172]
即在基于通用协议文件,识别得到第二rpc协议模型中的出参和返回值数据类型和属性定义之后,需要基于所述出参和返回值数据类型的转换规则,将所述第二rpc协议模型中的出参和返回值转换为map结构。再将所述map结构的出参和返回值填充至通用模型中的对应字段,即可得到第二通用模型。其中,第二通用模型例如:
[0173]
class commonbean{
[0174]
//接口名称
[0175]
string functionname=“rpc_adjust_tunnel”;
[0176]
//入参列表
[0177]
list《map《stirng,string》》inparams;
[0178]
//出参列表
[0179]
list《map《stirng,string》》outparams=[《”tunnel”:”《{”id”:”1”,”name”:”第一条业务”,”attr”:”{”desc”:”修改”,”createuser”:
””
}”}》”》];
[0180]
//返回值
[0181]
map《stirng,string》returnvalue=《”code”:”0”,“msg”:”success”》;
[0182]
}
[0183]
进一步,一实施例中,所述web服务基于java的spring boot框架实现,对外提供基于http协议的post接口,所述post接口的入参和出参采用通用模型对应的json格式字符串。
[0184]
本实施例中,上述web服务基于java的spring boot框架实现,对外提供基于http协议的post接口,所述post接口的入参和出参采用通用模型对应的json格式字符串,在进行模型转换与消息传递时,可便于通用模型与json格式字符串的转换。
[0185]
本实施例中,远程过程调用方法包括:当收到客户基于http协议向web服务触发的调用请求时,提取所述调用请求对应的第一入参,所述第一入参包括服务端对应的rpc接口名称和rpc接口入参,所述第一入参为json格式字符串;将所述第一入参从json格式字符串转换为第一rpc协议模型;基于rpc接口名称与第一rpc协议模型,使用对应rpc框架的客户端调用服务端对应的rpc服务,得到包括出参和返回值的第二rpc协议模型;将所述第二rpc协议模型转换成json格式字符串,返回给web服务,再基于http协议返回给客户。本发明在原始rpc服务的基础上提供一层通用代理,将rpc接口转换成http接口对外提供服务,增加传输协议的转换和消息模型转换的过程,使得客户能采用统一的方式调用不同的rpc框架下服务端的对应服务,当客户(本地系统)调用其他系统的服务时,只需要采用统一的http接口调用,无需再引入不同的rpc客户端,即不再受限于rpc框架的语言限制和模型限制,解决了现有基于rpc框架进行远程过程调用时,存在适应性、兼容性以及语言限制的技术问题。此外,本发明还具备以下优点:http协议更通用,可以直接在浏览器端通过js调用,一般的rpc框架都不支持js调用;兼容性更强,json格式字符串存储数据,先天具备更强的兼容性;采用http协议暴露服务,更容易穿透防火墙和分布式环境多实例部署。
[0186]
第三方面,本发明实施例还提供一种远程过程调用装置。
[0187]
参照图5,远程过程调用装置一实施例的功能模块示意图。
[0188]
本实施例中,所述远程过程调用装置包括:
[0189]
提取模块10,用于当收到客户基于http协议向web服务触发的调用请求时,提取所述调用请求对应的第一入参,所述第一入参包括服务端对应的rpc接口名称和rpc接口入参,所述第一入参为json格式字符串;
[0190]
第一转换模块20,用于将所述第一入参从json格式字符串转换为第一rpc协议模型;
[0191]
调用模块30,用于基于rpc接口名称与第一rpc协议模型,使用对应rpc框架的客户端调用服务端对应的rpc服务,得到包括出参和返回值的第二rpc协议模型;
[0192]
第二转换模块40,用于将所述第二rpc协议模型转换成json格式字符串,返回给web服务,再基于http协议返回给客户。
[0193]
进一步,一实施例中,所述第一转换模块20,具体用于:
[0194]
将所述第一入参从json格式字符串转换成第一通用模型;
[0195]
将第一通用模型中的rpc接口入参转换为第一rpc协议模型。
[0196]
进一步,一实施例中,所述远程过程调用装置,还包括生成模块,用于:
[0197]
基于预设文件规范编写各个rpc框架对应的rpc协议文件;
[0198]
基于rpc框架确定对应的rpc协议解析器;
[0199]
基于rpc协议解析器解析所述rpc框架对应的rpc协议文件,并基于解析结果生成通用协议文件,其中,所述通用协议文件用于记录所述rpc框架对应的rpc接口,对应的rpc协议模型的入参、出参和返回值数据类型及属性定义。
[0200]
进一步,一实施例中,所述第二转换模块40,具体用于:
[0201]
将所述包括出参和返回值的第二rpc协议模型转换为第二通用模型;
[0202]
将所述第二通用模型转换成json格式字符串。
[0203]
进一步,一实施例中,所述第二转换模块40,还具体用于:
[0204]
创建通用模型;
[0205]
基于通用协议文件,识别得到第二rpc协议模型中的出参和返回值数据类型和属性定义;
[0206]
基于所述出参和返回值数据类型的转换规则,将所述第二rpc协议模型中的出参和返回值转换为map结构;
[0207]
将所述map结构的出参和返回值填充至通用模型中的对应字段,得到第二通用模型。
[0208]
进一步,一实施例中,所述web服务基于java的spring boot框架实现,对外提供基于http协议的post接口,所述post接口的入参和出参采用通用模型对应的json格式字符串。
[0209]
其中,上述远程过程调用装置中各个模块的功能实现与上述远程过程调用方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。
[0210]
第四方面,本发明实施例还提供一种可读存储介质。
[0211]
本发明可读存储介质上存储有远程过程调用程序,其中所述远程过程调用程序被处理器执行时,实现如上述的远程过程调用方法的步骤。
[0212]
其中,远程过程调用程序被执行时所实现的方法可参照本发明远程过程调用方法的各个实施例,此处不再赘述。
[0213]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
[0214]
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0215]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备执行本发明各个实施例所述的方法。
[0216]
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献