CN112416612B - 服务调用方法、装置、计算机设备和可读存储介质 - Google Patents

服务调用方法、装置、计算机设备和可读存储介质 Download PDF

Info

Publication number
CN112416612B
CN112416612B CN202010814044.3A CN202010814044A CN112416612B CN 112416612 B CN112416612 B CN 112416612B CN 202010814044 A CN202010814044 A CN 202010814044A CN 112416612 B CN112416612 B CN 112416612B
Authority
CN
China
Prior art keywords
service
module
target
metadata
calling
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010814044.3A
Other languages
English (en)
Other versions
CN112416612A (zh
Inventor
耿万鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Bilibili Technology Co Ltd
Original Assignee
Shanghai Bilibili Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Bilibili Technology Co Ltd filed Critical Shanghai Bilibili Technology Co Ltd
Priority to CN202010814044.3A priority Critical patent/CN112416612B/zh
Publication of CN112416612A publication Critical patent/CN112416612A/zh
Application granted granted Critical
Publication of CN112416612B publication Critical patent/CN112416612B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/955Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
    • G06F16/9566URL specific, e.g. using aliases, detecting broken or misspelled links
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/549Remote execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请提供了一种基于路由网关的服务调用方法、装置、计算机设备和可读存储介质。该方法包括:在编译期生成多个模块的模块元数据,并汇总所述模块元数据;对汇总的模块元数据执行完备性检查,并生成对应的汇总入口类;将所述汇总入口类向服务注册中心注册;以及响应于服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务。通过本申请,可以确保无环及对应的依赖存在,大大提高团队协作开发的效率。

Description

服务调用方法、装置、计算机设备和可读存储介质
技术领域
本申请涉及应用发布技术领域,尤其涉及基于路由网关的服务调用方法、装置、计算机设备和可读存储介质。
背景技术
安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国谷歌公司(Google)和开放手机联盟领导及开发。
程序的执行过程就是方法的调用过程,有方法调用,必然会促使对象跟对象之间产生依赖,除非一个对象不参与程序的运行,这样的对象就像一座孤岛,与其它对象没有任何交互,但是这样的对象也就没有任何存在价值。因此,在程序代码中,任何一个对象必然会与其它一个甚至更多个对象产生依赖关系。“方法调用”是最常见产生依赖的原因,一个对象与其它对象必然会通信(除非所有的代码逻辑全部写在了这个对象内部),通信通常情况下就意味着有方法的调用,亦即意味着这两个对象之间存在依赖关系(至少要有其它对象的引用才能调用方法),另外常见的一种产生依赖的原因是继承。
其中,若干个对象循环嵌套引用会产生循环依赖,而循环依赖的对象在运行时一直循环调用,直至内存溢出报错。为了衡量对象之间依赖程度的高低,人们引进了“耦合”这一概念,耦合度越高,说明对象之间的依赖程度越高。在多团队共同开发一个Android应用的情形下,需要一种通用技术降低团队之间的代码耦合度,最常用技术包括总线、路由、ServiceLoader(一种依赖倒置的开发方式)等,这几种方案最核心的思想,都是通过一个中间SDK来注册并分发消息、对象或者启动页面。
但是,尝试用针对路径或者约定的固定格式的key来分发所有内容,缺少强类型的约束,此外不能很好的处理URI(资源标识符),比如需要对HTTP URI进行映射或者转义;类似于ServiceLoader的依赖倒置的处理方式缺少生命周期以及服务之间的依赖检查,且十分繁琐。
发明内容
本申请的目的是提供一种基于路由网关的服务调用方法、装置、计算机设备和可读存储介质,用于解决现有技术中的上述技术问题。
一方面,为实现上述目的,本申请提供了一种服务调用方法。
该服务调用方法包括:在编译期生成多个模块的模块元数据,并汇总所述模块数据;对汇总的模块元数据执行完备性检查,并生成对应的汇总入口类;将所述汇总入口类向服务注册中心注册;以及响应于服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务。
进一步地,对汇总的模块元数据执行完备性检查,并生成对应的汇总入口类的步骤包括:对汇总的模块元数据执行完备性检查;若所述完备性检查被成功执行,生成对应的汇总入口类。
进一步地,对汇总的模块元数据执行完备性检查的步骤包括:生成汇总的模块元数据对应的配置文件;基于所述配置文件对所述汇总的模块元数据执行完备性检查。
进一步地,所述完备性检查包括:依赖关系检查;循环依赖检查。
进一步地,响应于服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务的步骤包括:基于预设的路径规则对目标资源标识符执行匹配;跳转至匹配所得的目标页面,并加载第一模块;以及响应于所述第一模块的服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务。
进一步地,基于预设的路径规则对目标资源标识符执行匹配的步骤包括:确定目标资源标识符对应的路由类型;基于所述路由类型及预设的路径规则对目标资源标识符执行匹配。
进一步地,响应于服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务的步骤包括:响应于第一模块的服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务;其中所述目标服务由第二模块提供,所述第一模块与所述第二模块分别为Gradle模块并相互依赖;所述第一模块包含第一实现组件和第一接口组件,所述第二模块包含第二实现组件和第二接口组件,所述目标服务基于所述第二接口组件而被调用。
另一方面,为实现上述目的,本申请提供了一种基于路由网关的服务调用装置。
该基于路由网关的服务调用装置包括:元数据生成模块,用于在编译期生成多个模块的模块元数据,并汇总所述模块元数据;完备性检查模块,用于对汇总的模块元数据执行完备性检查,并生成对应的汇总入口类;注册模块,用于将所述汇总入口类向服务注册中心注册;以及服务调用模块,用于响应于服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务。
为实现上述目的,本申请还提供一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行计算机程序时实现上述方法的步骤。
为实现上述目的,本申请还提供计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法的步骤。
本申请提供的基于路由网关的服务调用方法、装置、计算机设备和可读存储介质,在编译期生成多个待调用服务的服务元数据,并汇总服务元数据;对汇总的服务元数据执行完备性检查,并生成待调用服务对应的汇总入口类;将汇总入口类向服务注册中心注册;响应于服务调用请求,通过服务注册中心发现服务调用请求所对应的目标服务,并调用目标服务;从而在编译期保障待调用服务模块的完备性,确保无环及对应的依赖存在,大大提高团队协作开发的效率。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本申请实施例一提供的服务调用方法的流程图;
图2a和图2b分别是现有技术中处理循环依赖的解决方案的示意;
图3为本申请一实施例中URI的路径匹配示意;
图4为本申请实施例二提供的服务调用装置的框图;
图5为本申请实施例三提供的计算机设备的硬件结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
就现有技术而言,降低团队之间的代码耦合度最常用的技术包括总线、路由、ServiceLoader(一种依赖倒置的开发方式)等,这几种方案最核心的思想,都是通过一个中间SDK来注册并分发消息、对象或者启动页面。但是,尝试用针对路径或者约定的固定格式的key来分发所有内容本质上是一种动态调用,基于约定来达成,缺少强类型的约束,此外不能很好的处理URI,比如需要对HTTP URI进行映射或者转义;类似于ServiceLoader的依赖倒置的处理方式虽然很好利用接口来保证了调用的类型,但是每个被倒置的接口均是无状态游离的节点,缺少生命周期以及服务之间的依赖检查。此外(参考图2a),基于ServiceLoader,各模块(例如模块A、模块B)的接口定义,要么需要下沉到一个公共模块,要么需要针对每个需要暴露服务的模块另外单独新建一个接口(API)模块(参考图2b),从而达到屏蔽实现的目的,十分繁琐。
基于发明人的上述研究,本申请提出一种基于路由网关的服务调用方法、装置、计算机设备和可读存储介质。基于本申请提供的基于路由网关的服务调用方法,在编译期生成多个模块的模块元数据,并汇总模块元数据;对汇总的模块元数据执行完备性检查,并生成对应的汇总入口类;将汇总入口类向服务注册中心注册;以及响应于服务调用请求,通过服务注册中心发现服务调用请求所对应的目标服务,并调用目标服务;从而在编译期保障待调用服务的模块的完备性,确保无环及对应的依赖存在,大大提高团队协作开发的效率。
关于本申请提供的基于路由网关的服务调用方法、装置、计算机设备和可读存储介质的具体实施例,将在下文中详细描述。
实施例一
本申请实施例提供了一种基于路由网关的服务调用方法,通过在编译期保障待调用服务的模块的完备性,确保无环及对应的依赖存在,大大提高团队协作开发的效率。具体地,图1为本申请实施例一提供的基于路由网关的服务调用方法的流程图,如图1所示,该实施例提供的基于路由网关的服务调用方法包括如下的步骤S101至步骤S104。
步骤S101:在编译期生成多个模块的模块元数据,并汇总模块元数据。
具体而言,在一个实施例中,通过JavaAPT(Annotation Processing Tool,注解处理器)技术生成相应的元数据,再根据元数据生成相应的代码,即通过APT接口生成相应的Java文件。注解(Annotation),也叫元数据,一种代码级别的说明,是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次,它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明和注释。
步骤S102:对汇总的模块元数据执行完备性检查,并生成对应的汇总入口类。
其中,对元数据执行完备性检查的一个目的是确保信息的完整性,以及在构建应用(APP)时汇总进行检查以确保无循环依赖,从而在编译期保障待调用服务的模块的完备性,确保无环及对应的依赖存在,大大提高团队协作开发的效率。
步骤S103:将所述汇总入口类向服务注册中心注册。
其中,各个模块在对外提供服务前,必须首先到注册中心进行注册;而所有访问通过服务网关进行访问,然后由服务网关路由到对应服务中心进行交互访问。具体而言,在网关层接受各个模块的注册,模块可包含URI(资源)、服务(接口或者类),在加载模块或者获取服务时执行模块的生命周期或者任务,降低模块之间的耦合。
步骤S104:响应于服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务。
其中,该服务调用请求由调用目标服务的模块发出。
至此,服务调用过程完毕。
可选地,在一种实施例中,上述步骤S102包括:
子步骤S102a(未示出):对汇总的模块元数据执行完备性检查;
子步骤S102b:若所述完备性检查被成功执行,生成对应的汇总入口类。
即,在汇总的模块元数据的完备性检查通过后,再生成对应的汇总入口类,否则报错,以便检查相关内容(包括依赖关系所涉及的需要暴露的服务)是否完整;其中,在完备性检查涉及循环依赖检查时,若报错,操作人员还需检查并消除循环依赖。
可选地,在一种实施例中,上述完备性检查是基于新增的配置文件完成的。具体而言,在上述子步骤S102a中,生成汇总的模块元数据对应的配置文件,并基于所述配置文件对所述汇总的模块元数据执行完备性检查。该配置文件包含模块元数据的汇总信息,因此除用于执行前述完备性检查外,在一个实施例中,该配置文件还被用于生成前述汇总入口类,从而无需重复获取多个模块的信息,因此处理效率大大提高。即,在上述子步骤S102b中,若所述完备性检查被成功执行,基于所述配置文件生成对应的汇总入口类。
可选地,在一种实施例中,上述完备性检查包括依赖关系检查和循环依赖检查。
其中,依赖关系检查主要用于检查相关内容(包括依赖关系所涉及的需要暴露的服务)是否完整,若不完整(例如某个模块声明依赖于另一个模块,但是被依赖的模块却没有暴露相应的服务)则报错;而循环依赖检查则主要用于检查各模块的API之间是否相互依赖,若存在API的相互依赖则报错。通过依赖关系检查和循环依赖检查,可以保障待调用服务模块的完备性,确保无环及对应的依赖存在,以提高团队协作开发的效率。
可选地,在一种实施例中,上述步骤S104包括:
子步骤S104a(未示出):基于预设的路径规则对目标资源标识符(URI)执行匹配;
子步骤S104b(未示出):跳转至匹配所得的目标页面,并加载第一模块;
子步骤S104c(未示出):响应于所述第一模块的服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务。
其中,本申请提供的服务调用方法提供SDK作为一个微服务的网关层,对外屏蔽内部微服务的细节,只暴露URI,针对路由跳转内置统一路由协议,用于特定的路由逻辑。其中,该统一的路由协议为基于URI的格式封装的路由协议,分为声明和匹配两个阶段。
对于声明阶段:
路径规则的声明支持如下3种方式(优先级从高到低):
1.复合,例如:(?<capture_name>path1|path2|pathN),其中?<capture_name>是可选的,括号是可嵌套的,如(bilibili|http|https)与(bilibili|htt(p|ps))匹配规则是一样的,注意括号中的字符串不能为空,即暂不支持http(|s)这样的格式,段内可以有多个;
2.通配,例如{capture_name}或者*,其中*等价{},即匹配但是不捕获,段内只能有一个;
3.前缀,**,只能存在末尾,如https://bilibili.com/**,会匹配https://bilibili.com/a/b/n,但是不能匹配https://bilibili.com,一定会产生捕获,capture_name为空字符串。
其中,前两类路由规则不能跨越“/”,且不同路由规则是互斥的,每个段内只能应用一类。同时,允许添加字符串KV对声明为路由的属性用于匹配。
对于匹配阶段:
传入一个标准的URI,其中一些query作为协议的一部分。
例如:
1.name以-B开头,保留几个固定的name用于协议的一部分,其他的-B开头的当做特殊参数传给目标,其中一个特殊的是路由类型,如-Btype=xxx,指明目标URI的类型,如不存在则代码中默认依次尝试全部类型。
2.name以-A开头的,去除-A的部分为URI中的属性,用于匹配过程,例如https://www.bilibili.com?-Abrowser=main中可提取出browser=main,参与路由匹配。
可选地,在一种实施例中,对于匹配过程,上述子步骤S104a包括:
确定目标资源标识符对应的路由类型,并基于所述路由类型及预设的路径规则(例如上述路径规则)对目标资源标识符执行匹配。
通过引入对路由类型,在路由类型未指定的情况下本实施例可以实现根据统一路由协议进行路由查询,因此该方案接受一切URI的注册,而无需对进入的URI进行转移或者做特别处理,相较于现有的处理方式而言大大简化了处理过程。
为直观起见,参考图3,对匹配阶段的工作举例如下:
当一条URI进入匹配过程、但不指定路由类型时,会依次在NATIVE/H5中找到第一条匹配成功的目标路由,如待匹配的URI为https://bilibili.com/video/123则会在NATIVE中匹配成功,而如果待匹配URI为https://bilibili.com/music时,由于NATIVE中匹配失败,而在H5中匹配成功。
如上所述的引入了路由类型的统一路由协议,可灵活地做到降级、互备,并且不对待匹配URI做出假定(如只限定scheme为bilibili或者其他)。
可选地,在一种实施例中,上述步骤S104包括:
响应于第一模块的服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务;其中所述目标服务由第二模块提供,所述第一模块与所述第二模块分别为Gradle模块并相互依赖;所述第一模块包含第一实现组件和第一接口组件,所述第二模块包含第二实现组件和第二接口组件,所述目标服务基于所述第二接口组件而被调用。
该方式可直接在一个模块中声明接口API与实现,以自动暴露模块接口,既可在模块直接被依赖时只暴露其API,亦可在发布时同时自动发布出API与实现这两个模块。相较于现有技术而言,该方式避免了接口下沉形成超级公共接口模块,也无需为每个暴露服务的模块单独新建API模块。
举例来说,在一个具体实现方式中,对于两个功能模块,使它们在Gradle模块中互相依赖,从而各自屏蔽实现,而仅暴露接口API。一种做法是在src->main目录下分别添加相应模块的API目录,并各自独立编译API部分的代码,从而使其脱离Android插件的编译范围,从根本上避免了循环依赖的产生。
实施例二
对应于上述实施例一,本申请实施例二提供了一种基于路由网关的服务调用装置,相关技术特征的详细描述和对应的技术效果可参考上述实施例一,该处不再赘述。图4为本申请实施例二提供的业务数据的服务调用装置的框图,如图4所示,该装置包括元数据生成模块201、完备性检查模块202、注册模块203、服务调用模块204。
其中,元数据生成模块201用于在编译期生成多个模块的模块元数据,并汇总模块元数据;完备性检查模块202,用于对汇总的模块元数据执行完备性检查,并生成对应的汇总入口类;注册模块203,用于将汇总入口类向服务注册中心注册;服务调用模块204,用于响应于服务调用请求,通过服务注册中心发现服务调用请求所对应的目标服务,并调用目标服务。
可选地,在一种实施例中,完备性检查模块202包括第一子模块,用于对汇总的模块元数据执行完备性检查;还包括第二子模块,用于若所述完备性检查被成功执行,生成对应的汇总入口类。。
可选地,在一种实施例中,第一子模块用于生成汇总的模块元数据对应的配置文件,并基于所述配置文件对所述汇总的模块元数据执行完备性检查。
可选地,在一种实施例中,完备性检查包括:依赖关系检查;循环依赖检查。
可选地,在一种实施例中,服务调用模块204包括第三子模块、第四子模块和第五子模块。其中,第三子模块用于基于预设的路径规则对目标资源标识符执行匹配;第四子模块用于跳转至匹配所得的目标页面,并加载第一模块;第五子模块用于响应于所述第一模块的服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务。
可选地,在一种实施例中,第三子模块用于确定目标资源标识符对应的路由类型,并基于所述路由类型及预设的路径规则对目标资源标识符执行匹配。
可选地,在一种实施例中,服务调用模块204用于响应于第一模块的服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务;其中所述目标服务由第二模块提供,所述第一模块与所述第二模块分别为Gradle模块并相互依赖;所述第一模块包含第一实现组件和第一接口组件,所述第二模块包含第二实现组件和第二接口组件,所述目标服务基于所述第二接口组件而被调用。
实施例三
本实施例三还提供一种计算机设备,如可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图5所示,本实施例的计算机设备01至少包括但不限于:可通过系统总线相互通信连接的存储器011、处理器012,如图5所示。需要指出的是,图5仅示出了具有组件存储器011和处理器012的计算机设备01,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
本实施例中,存储器011(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器011可以是计算机设备01的内部存储单元,例如该计算机设备01的硬盘或内存。在另一些实施例中,存储器011也可以是计算机设备01的外部存储设备,例如该计算机设备01上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器011还可以既包括计算机设备01的内部存储单元也包括其外部存储设备。本实施例中,存储器011通常用于存储安装于计算机设备01的操作系统和各类应用软件,例如实施例二的基于路由网关的服务调用装置的程序代码等。此外,存储器011还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器012在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器012通常用于控制计算机设备01的总体操作。本实施例中,处理器012用于运行存储器011中存储的程序代码或者处理数据,例如应用组件的生成方法等。
实施例四
本实施例四还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于基于路由网关的服务调用装置,被处理器执行时实现实施例一的应用组件的生成方法。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

Claims (8)

1.一种基于路由网关的服务调用方法,其特征在于,包括:
在编译期生成多个模块的模块元数据,并汇总所述模块元数据,其中,所述模块为待调用服务的模块,所述模块元数据声明在包、类、字段、方法、局部变量或方法参数的前面,用来对这些元素进行说明和注释;
对汇总的模块元数据执行完备性检查,若所述完备性检查被成功执行,生成对应的汇总入口类,其中,所述完备性检查包括:依赖关系检查和循环依赖检查,其中,所述依赖关系检查用于检查依赖关系所涉及的需要暴露的服务是否完整,所述循环依赖检查用于检查各模块的API之间是否相互依赖;
将所述汇总入口类向服务注册中心注册;以及
响应于服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务。
2.根据权利要求1所述的服务调用方法,其特征在于,对汇总的模块元数据执行完备性检查的步骤包括:
生成汇总的模块元数据对应的配置文件;
基于所述配置文件对所述汇总的模块元数据执行完备性检查。
3.根据权利要求1至2中任一项所述的服务调用方法,其特征在于,响应于服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务的步骤包括:
基于预设的路径规则对目标资源标识符执行匹配;
跳转至匹配所得的目标页面,并加载第一模块;
响应于所述第一模块的服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务。
4.根据权利要求3所述的服务调用方法,其特征在于,基于预设的路径规则对目标资源标识符执行匹配的步骤包括:
确定目标资源标识符对应的路由类型;
基于所述路由类型及预设的路径规则对目标资源标识符执行匹配。
5.根据权利要求1至2中任一项所述的服务调用方法,其特征在于,响应于服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务的步骤包括:
响应于第一模块的服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务;
其中所述目标服务由第二模块提供,所述第一模块与所述第二模块分别为Gradle模块并相互依赖;所述第一模块包含第一实现组件和第一接口组件,所述第二模块包含第二实现组件和第二接口组件,所述目标服务基于所述第二接口组件而被调用。
6.一种基于路由网关的服务调用装置,其特征在于,包括:
元数据生成模块,用于在编译期生成多个模块的模块元数据,并汇总所述模块元数据,其中,所述模块为待调用服务的模块,所述模块元数据声明在包、类、字段、方法、局部变量或方法参数的前面,用来对这些元素进行说明和注释;
完备性检查模块,用于对汇总的模块元数据执行完备性检查,若所述完备性检查被成功执行,生成对应的汇总入口类,其中,所述完备性检查包括:依赖关系检查和循环依赖检查,其中,所述依赖关系检查用于检查依赖关系所涉及的需要暴露的服务是否完整,所述循环依赖检查用于检查各模块的API之间是否相互依赖;
注册模块,用于将所述汇总入口类向服务注册中心注册;以及
服务调用模块,用于响应于服务调用请求,通过所述服务注册中心发现所述服务调用请求所对应的目标服务,并调用所述目标服务。
7.一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5任一项所述方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1至5任一项所述方法的步骤。
CN202010814044.3A 2020-08-13 2020-08-13 服务调用方法、装置、计算机设备和可读存储介质 Active CN112416612B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010814044.3A CN112416612B (zh) 2020-08-13 2020-08-13 服务调用方法、装置、计算机设备和可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010814044.3A CN112416612B (zh) 2020-08-13 2020-08-13 服务调用方法、装置、计算机设备和可读存储介质

Publications (2)

Publication Number Publication Date
CN112416612A CN112416612A (zh) 2021-02-26
CN112416612B true CN112416612B (zh) 2023-03-28

Family

ID=74853940

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010814044.3A Active CN112416612B (zh) 2020-08-13 2020-08-13 服务调用方法、装置、计算机设备和可读存储介质

Country Status (1)

Country Link
CN (1) CN112416612B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113918239B (zh) * 2021-10-14 2024-05-17 上海幻电信息科技有限公司 代码实现方法及系统
CN114979143B (zh) * 2022-05-19 2024-04-16 中国银行股份有限公司 一种分布式服务的实现方法和分布式服务系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107203535A (zh) * 2016-03-16 2017-09-26 阿里巴巴集团控股有限公司 信息查询方法及装置
CN109445923A (zh) * 2018-11-01 2019-03-08 郑州云海信息技术有限公司 一种微服务任务调度的方法及装置
CN110308900A (zh) * 2019-06-27 2019-10-08 广州华多网络科技有限公司 页面路由文档的生成方法、装置、计算机设备及存储介质
CN110377438A (zh) * 2019-07-22 2019-10-25 广州小鹏汽车科技有限公司 跨进程通信接口的路由方法、装置和系统
CN111045833A (zh) * 2018-10-15 2020-04-21 北京京东尚科信息技术有限公司 接口调用的方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6207163B2 (ja) * 2013-01-30 2017-10-04 キヤノン株式会社 クライアント、サーバー、管理システム及びその方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107203535A (zh) * 2016-03-16 2017-09-26 阿里巴巴集团控股有限公司 信息查询方法及装置
CN111045833A (zh) * 2018-10-15 2020-04-21 北京京东尚科信息技术有限公司 接口调用的方法和装置
CN109445923A (zh) * 2018-11-01 2019-03-08 郑州云海信息技术有限公司 一种微服务任务调度的方法及装置
CN110308900A (zh) * 2019-06-27 2019-10-08 广州华多网络科技有限公司 页面路由文档的生成方法、装置、计算机设备及存储介质
CN110377438A (zh) * 2019-07-22 2019-10-25 广州小鹏汽车科技有限公司 跨进程通信接口的路由方法、装置和系统

Also Published As

Publication number Publication date
CN112416612A (zh) 2021-02-26

Similar Documents

Publication Publication Date Title
CN102413022B (zh) 一种应用调试方法和系统
US8285676B2 (en) Containment agnostic, N-ary roots leveraged model synchronization
CN111061643B (zh) Sdk集群的兼容性检测方法、装置、电子设备及存储介质
CN106569880B (zh) 一种Android应用间动态共享资源的方法及系统
CN112416612B (zh) 服务调用方法、装置、计算机设备和可读存储介质
CN106294113B (zh) 一种基于可编程式测试服务的创建方法及装置
CN106339237A (zh) 针对JavaEE领域WEB应用的插件加载框架及方法
CN112769706B (zh) 组件化路由方法及系统
CN106775781B (zh) 减小应用安装包的方法、装置及电子设备
US11893367B2 (en) Source code conversion from application program interface to policy document
CN113407362A (zh) 基于车载Android系统SOA架构SOMEIP通信中间层实现方法及系统
CN108804100B (zh) 创建界面元素的方法、装置、存储介质及移动终端
CN111651169B (zh) 基于web容器的区块链智能合约运行方法及系统
CN110457013B (zh) 程序组件配置装置及方法
US9411618B2 (en) Metadata-based class loading using a content repository
CN110941443B (zh) 修改sdk中文件名的方法、装置及电子设备
CN111309332A (zh) 文件内容按需加载方法、装置及电子设备、存储介质
CN116578282A (zh) 代码生成方法、装置、电子设备及介质
CN116414774A (zh) 文件迁移方法、装置、设备及存储介质
CN111045746A (zh) 代码扩展方法和框架
CN111399842B (zh) 一种代码编译方法及装置
CN112328241B (zh) 一种应用程序开发中创建Android库模块依赖关系的方法及装置
CN110989985B (zh) 基于Maven的依赖包的管理方法、装置、计算机设备及存储介质
CN111273940B (zh) 将程序文件上传至代码仓库的方法及装置
CN110704295B (zh) 一种数据调用方法、装置、设备及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant