一种基于显隐参数注册的远程服务接口调用方法与流程

文档序号:32241074发布日期:2022-11-18 22:29阅读:38来源:国知局
一种基于显隐参数注册的远程服务接口调用方法与流程

1.本发明涉及一种基于显隐参数注册的远程服务接口调用方法。


背景技术:

2.远程过程调用(remote procedure call,rpc)技术被广泛运用在多机系统的通信当中。无论是大规模分布式集群或者是普通多机业务系统,rpc技术一般在其中承担系统协调与数据交换的责任,而rpc性能和可靠性的高低直接决定了系统性能和可用性的好坏。rpc的本质是在客户端要求远程服务端运行某项服务并获取其结果的过程。它是一种进程间的通信机制,并未规定具体的实现方式、平台和语言。一般在java web开发中使用dubbo框架实现远程过程调用,相对来说,dubbo调用需要在代码中直接进行方法名的指定和调用,对服务生产者难以有约束,同时要将生产者代码嵌入到消费者,容易出现版本不一致的情况。这种依赖产生了工程代码、部署维护等方面的耦合与制约,从而促使架构师们按业务领域设计并搭建一系列的服务中心。
3.而且dubbo调用需要进行序列化和反序列化,序列化机制负责将数据从对象的状态信息转换成可传输的形式,反序列化机制则是逆向过程,通过序列化和反序列化机制,不同主机上的不同进程得以实现数据交换,它们是rpc的重要一环。但是序列化过程遇到复杂对象会导致效率问题,同时又加剧了生产者到消费者的代码侵入。多软件数据调用和交互希望这些独立部署的服务将各自领域内核心的数据源、复杂的业务逻辑和多变的上层应用之间进行了有效的隔离,提供高度内聚且具有标准语义的远程服务接口。


技术实现要素:

4.发明目的:在局域网场景下、多配置项开发环境中,各个服务存在相互调用,不同开发人员相互远程过程调用(remote procedure call,rpc)存在需要引入接口依赖、参数描述不清楚或者类型错误、对象序列化的问题。为了解决多参数远程调用,返回数据格式无规则的问题,有效支持服务直接使用远程过程调用,削弱程序之间的依赖,同时清楚描述接口的显式和隐式参数,本发明提供一种基于显隐参数注册的远程服务接口调用方法。
5.在运用该基于显隐参数注册的远程服务接口调用之前,需要搭建dubbo框架,不同配置项之间均需引用dubbo依赖,其中,搭建dubbo使用的通讯中间件为zookeeper,建议使用3台及以上且为奇数台的集群,以保证服务注册、调用稳定。实现本发明目的的技术解决方案为:本发明提供一种基于显隐参数注册的远程服务接口调用方法,包括以下步骤:
6.步骤1:针对远程调用服务,通过注册平台注册服务信息,将服务生产者接口对象处理为可用元信息描述的数据对象,仅需通过注册的唯一标识提供高度内聚且具有标准语义的远程服务接口调用,通过注册平台将调用参数处理标记为显参数和隐参数,实现最小化传参的服务消费者与服务提供者之间透明且高效的点对点调用。对于远程调用的生产者和消费者,引用dubbo框架实现远程过程调用通路,通过zookeeper注册中心实现dubbo框架本身的通讯和注册;
7.步骤2:针对行列式形式的数据帧远程调用,数据帧包括元信息段和数据段,元信息段描述数据帧中包括的字段属性,数据段为字段键值对列表。针对服务生产者(指提供远程调用服务的接口),实现反射调用路由父类接口类并按格式封装路由规定的传参格式和接口数据交换格式;
8.步骤3:根据步骤2中封装的反射调用路由,生产者继承反射调用路由父类接口并基于业务需求实现希望发布的服务,返回数据格式并按步骤2要求规范化数据交换格式,即标准jsonobject格式的数据帧;
9.步骤4:针对服务消费者(指远程调用服务生产者的其他程序),引用反射调用路由父类接口文件;
10.步骤5:针对服务消费者,引用反射调用路由子类接口文件;
11.步骤6:服务生产者在注册中心添加服务接口信息和调用参数的详细描述,并特殊声明每一个接口调用参数是显式还是隐式,填写参数类型信息。其中显式参数指暴露给外部服务调用需要传入的参数,仅需注册该参数的名称、字段类型等元信息;隐式参数指调用服务必须使用,但是外部调用无需处理,自动带入的默认参数,除注册该参数的名称、字段类型等元信息外必须注册该参数的默认值。同时注册中心自动生成服务的唯一标识id;
12.步骤7:消费者使用服务时,仅需传入服务唯一标识id、参数信息,统一调用父类接口的唯一公开接口;
13.步骤8:根据业务需求组织参数远程调用服务。
14.步骤1中,所述引用dubbo框架,具体指利用开源远程过程调用rpc框架进行最终服务调用,使用开源的dubbo框架;如果没有特殊声明,其中服务生产者指服务接口的实现方,服务消费者指远程使用服务接口的调用方。
15.步骤2包括:构建服务调用父类接口类p_interface,p_interface仅有唯一的公开方法getdata(string method,string params),其中字符串method为调用的具体方法名,params参数内包含了需要传入的所有参数键值对;针对服务生产者,每个服务生产者producer[1-n]均继承父类接口类构建子类接口类s_interface[1-n]并实现该类s_interface_impl[1-n],其中除了getdata方法为public关键词修饰的公开接口、且返回数据格式为标准jsonobject格式以外,所有其他子类方法均由private关键词修饰,并且在公开方法getdata(string method,string params)中,实现基于method参数、params参数的反射调用路由。
[0016]
步骤2中,所述路由规定的传参格式和接口数据交换格式为标准jsonobject格式的数据帧,格式固定为包括condition和filter两个字段的json数组,并且父类接口类有且仅有一个公开接口;其中,condition为隐式参数,外部服务调用时无需处理,自动带入的默认参数,除注册该参数的名称、字段类型等元信息外必须注册该参数的默认值;filter为显式参数,外部服务调用时必须依据注册信息传参;condition参数注册时直接填入该condition参数的value值,filter参数注册时仅描述该filter参数具体的填法,但是不设置默认值。
[0017]
步骤3中,所述规范化数据交换格式基于业务或前台显示需求进行组织,远程调用返回的标准jsonobject格式数据帧包括元信息段和数据段,元信息段描述数据帧中包括的字段属性,数据段为字段键值对列表,要求以标准jsonobject格式传递。
[0018]
步骤3、步骤4、步骤5中,路由父类接口类与子类接口类在生产者和消费者中相同。
[0019]
步骤5包括:服务消费者引用所有服务生产者的子类接口类s_interface[1-n];且引用的所有服务生产者和消费者的实例化java对象,即bean对象,均纳入spring框架管理其生命周期,并且声明bean对象的dubbo注册信息。
[0020]
步骤6中,在服务生产者注册服务前,需要在注册中心以服务管理服务注册信息,所述注册中心不同于步骤1中提到的zookeeper注册中心,其区别在于:zookeeper注册中心为开源软件,用于步骤1所述dubbo框架使用,仅管理服务的标识和ip地址,提供远程过程调用rpc时的服务生产者、服务消费者的ip信息发现与配置信息同步;注册中心用于管理服务生产者接口详细信息,包括传递参数的元信息,是网页端管理平台。
[0021]
步骤6中,服务生产者向注册平台注册服务接口信息和调用参数的详细描述,包括配置项软件的标识software,接口名method,显式参数列表filter,隐式参数列表condition,注册平台会自动生成服务生产者的唯一标识,记为api_id。
[0022]
步骤7中,所述统一调用父类接口的唯一公开接口形式为:
[0023]
jsonobject getdata(string method,string params);
[0024]
具体调用子类的方法有传入的服务唯一标识获取其注册信息,之后利用对应的实例化子类实现服务远程调用。
[0025]
本发明适用于多配置项之间调用复杂、接口参数多、开发人员多、各配置项版本容易不一致的场景。本发明的框架具有在服务的服务消费者与服务提供者之间进行透明且高效的点对点调用的能力。以满足在web开发中实施服务化架构的需要。具体而言,这款框架对应用开发阶段而言不应具有侵入性,在应用运行时能够提供高性能和高可靠的点对点rpc功能,以及一系列实用的服务治理功能,包括服务注册与发现,集群与负载均衡。最大优势是可以隔离dubbo调用,使生产者代码最小化侵入消费者,使消费者的rpc过程透明化,甚至可以做到前台直接查阅服务注册中心直接传入服务id远程调用服务。本文实现了一种基于显隐参数注册的远程服务接口调用方法,可以用于多配置项之间调用复杂、接口参数多、开发人员多、各配置项版本容易不一致的场景。
[0026]
本发明提供局域网场景下,解决多参数远程调用,返回数据格式无规则的问题的解决方法,有效支持服务直接使用远程过程调用,削弱程序之间的依赖,实现调用时最小化传参,返回数据格式化处理为标准数据帧。
[0027]
本发明与现有技术相比,其显著优点为:具有在服务的服务消费者与服务提供者之间进行透明且高效的点对点调用的能力,服务将各自领域内核心的数据源、复杂的业务逻辑和多变的上层应用之间进行了有效的隔离,提供高度内聚且具有标准语义的远程服务接口,并通过服务注册平台注册接口调用方法,仅需通过id即可调用对应的远程服务,对开发者友好,解决多配置项之间调用复杂、接口参数多、开发人员多、各配置项版本容易不一致的问题,适合多配置项调用。
附图说明
[0028]
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
[0029]
图1为本发明的步骤流程和关系图;
[0030]
图2为本发明反射调用路由的实现示意图。
具体实施方式
[0031]
步骤1:搭建dubbo框架,不同配置项之间均需引用dubbo依赖,其中,搭建dubbo使用的通讯中间件为zookeeper,使用3台及以上且为奇数台的集群,以保证服务注册、调用稳定;
[0032]
步骤2:本发明主要针对行列式形式的数据帧远程调用,数据帧包括元信息段和数据段,元信息段描述数据帧中包括的字段属性,数据段为字段键值对列表。构建服务调用父类接口类p_interface,该接口类仅有唯一的公开方法getdata(string method,string params),其中字符串method为调用的具体方法名,params参数内包含了需要传入的所有参数键值对;针对服务生产者,每个服务生产者producer[1-n]均继承父类接口类构建子类接口类s_interface[1-n]并实现该类s_interface_impl[1-n],其中除了getdata方法为public关键词修饰的公开接口、且返回数据格式为标准jsonobject格式的数据帧以外,所有其他子类方法均由private关键词修饰,并且在公开方法getdata(string method,string params)中,实现基于method参数、params参数的反射调用路由;
[0033]
步骤3:服务生产者基于业务需要,继承反射调用路由父类接口并基于业务需求实现希望发布的服务,且保证返回数据格式为步骤2要求的规范化数据交换格式,即标准jsonobject格式的数据帧;
[0034]
步骤4:服务消费者依赖步骤1中构建的服务调用父类接口类p_interface;
[0035]
步骤5:服务消费者引用所有服务生产者的子类接口类s_interface[1-n];且引用的所有服务生产者和消费者的实例化java对象,即bean对象,均纳入spring框架管理其生命周期,并且声明bean对象的dubbo注册信息;
[0036]
步骤6:服务生产者向注册平台注册服务接口信息和调用参数的详细描述,包括配置项软件的标识software,接口名method,显式参数列表filter,隐式参数列表condition,注册平台会自动生成服务生产者的唯一标识,记为api_id;
[0037]
步骤7:服务消费者在需要远程调用服务生产者时,根据步骤6注册生成的api_id传入参数,查询注册平台的注册信息,直接选择并调用对应的s_interface[i],通过统一的getdata(string method,string params)接口获取数据;
[0038]
步骤8:根据业务需求对服务进行注册和数据远程组织调用,服务消费者在调用服务时,服务生产者通过dubbo框架进行数据交换,通过反射调用路由解析真正需要调用的private修饰方法,组织数据传递给服务消费者;。
[0039]
本方法需要利用开源rpc框架dubbo,以实现远程过程调用通路,该步骤需要依赖zookeeper注册中心以实现dubbo框架本身的通讯和注册。在运用调用方法之前,需要构建服务信息注册平台,以存储和管理服务接口的描述信息和显式、隐式参数的元信息。
[0040]
其中,步骤2中每个服务生产者producer[i],可以认为是不同的软件配置项。每一个producer[i]仅需实现一个s_interface_impl[i]。步骤2中实现的其他private关键词修饰的方法均有且仅有一个参数jsonobject params。
[0041]
其中,步骤2中反射调用路由指利用传入的method参数获取到实际需要调用的方法名,该方法有且仅有一个参数jsonobject params,该类通过使用java的反射机制通过
method名称直接调用执行对应方法获取结果数据。
[0042]
其中,步骤6中,software标识特指该软件配置项注册到dubbo框架的标识,不包括版本号,该标识需要在整个大系统中唯一。步骤6中注册的显式参数列表和隐式参数列表形如表1所示:
[0043]
表1
[0044][0045]
condition字段表示隐式参数列表,该参数在消费者调用时是必须传递且无法修改的参数值,field表示字段名,type表示字段类型,value表示传入的默认值,decsription表示描述信息;filter字段表示显示参数列表,该参数在消费者调用时是可选传递且可以任意指定参数值,field表示字段名,type表示字段类型,decsription表示描述信息消费者在使用时根据需求填入filter字段的value值,该注册信息仅对如何传递显式参数进行描述。
[0046]
其中,步骤5中,程序通过解析dubbo的配置文件获取注册bean的名称和标识,注册名称主要指定了各个生产者实现的s_interface[i]在消费者中的bean id。
[0047]
其中,步骤7中,调用统一的getdata(string method,string params)接口返回的数据格式一般规定为标准jsonobject格式的数据帧,远程调用返回的标准jsonobject格式数据帧包括元信息段和数据段,元信息段描述数据帧中包括的字段属性,数据段为字段键值对列表。为避免消费者依赖生产者pojo类,为了尽可能避免序列化和反序列化,通过json字符串进行数据交换,一般数据交换格式形如表2所示:
[0048]
表2
[0049][0050]
其中,包含元信息描述字段metadata和数据帧字段dataframe。
[0051]
实施例
[0052]
结合图1本发明的一种基于显隐参数注册的远程服务接口调用方法,下面以两个软件配置项之间调用的场景下为示例对本发明做进一步详细的描述。服务生产者,本质也是dubbo框架中的生产者,但是所有调用均通过反射路由调用来代理;服务消费者本质也是dubbo框架中的消费者,是消费者集合,通过服务注册中心获取当前需成为的消费者实例来作为消费者调用目标生产者,实现透明化调用。主要包括以下步骤:
[0053]
搭建dubbo框架环境。基于图1,按dubbo官方文档搭建rpc框架,实现zookeeper集群的搭建和dubbo自带监控中心的搭建,对应步骤的前置条件。
[0054]
设计开发服务注册中心。通过java web程序,开发服务注册平台,用于管理服务生产者的接口信息和显隐参数注册信息,设计表结构如下:
[0055]
构建注册服务信息(api)如下表3所示:
[0056]
表3
[0057]
[0058][0059]
构建调用注册服务信息附属信息(pipeline)如下表4所示:
[0060]
表4
[0061]
序号调用服务信息(pipeline)字段属性数据类型主/外键1id生成uuid,主键varchar主键2f_pipeline_namepipeline名称varchar否3f_api_idapi主键idvarcharfk@api/id4f_pipeline_descpipeline描述varchar否5f_pipeline_filter显式参数元信息clob否6f_pipeline_condition隐式参数注册clob否7f_create_on创建时间datetime否
[0062]
其中api信息表主要注册了服务生产者id和接口api方法名;pipeline信息表主要注册了接口api主键,显式参数元信息和隐式参数注册。对应步骤2使用的表。
[0063]
基于图1、图2,在服务生产者(service)构建反射调用路由,生产者引用父类接口类p_interface,编写其子类s_interface及其实现类父类接口类p_interface_impl,并编写测试方法jsonobject test(jsonobject params),该方法使用的参数为string year,string model,float upper,其中year为隐式参数,取当前年份。对应步骤1和步骤2,将该信息注册到服务平台,即添加注册记录(api)如下表5所示:
[0064]
表5
[0065][0066]
添加注册服务信息附属信息(pipeline)如下表6所示:
[0067]
表6
[0068][0069]
服务消费者(custom)引入路由父类接口类p_interface依赖和生产者实现的子类接口s_interface依赖,并将该对象注册入dubbo框架,对应步骤3和步骤4。
[0070]
最后,在消费者需要调用方法的地方,直接传入注册信息的id(01)和显式参数(model=0101,upper=1.5)即可通过反射路由调用父类接口:
[0071]
p_interface.test(service,{condition:{year:2021},filter:{model:0101,upper:1.5})
[0072]
接口获取结果,对应步骤5、步骤6,获取结果后根据业务需求对数据进行组织和前台显示。
[0073]
具体实现中,本技术提供计算机存储介质以及对应的数据处理单元,其中,该计算机存储介质能够存储计算机程序,所述计算机程序通过数据处理单元执行时可运行本发明提供的一种基于显隐参数注册的远程服务接口调用方法的发明内容以及各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)或随机存储记忆体(random access memory,ram)等。
[0074]
本领域的技术人员可以清楚地了解到本发明实施例中的技术方案可借助计算机程序以及其对应的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机程序即软件产品的形式体现出来,该计算机程序软件产品可以存储在存储介质中,包括若干指令用以使得一台包含数据处理单元的设备(可以是个人计算机,服务器,单片机。muu或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
[0075]
本发明提供了一种基于显隐参数注册的远程服务接口调用方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1