CN117270833B - 服务调用及发布方法、介质和计算机设备 - Google Patents

服务调用及发布方法、介质和计算机设备 Download PDF

Info

Publication number
CN117270833B
CN117270833B CN202311559911.3A CN202311559911A CN117270833B CN 117270833 B CN117270833 B CN 117270833B CN 202311559911 A CN202311559911 A CN 202311559911A CN 117270833 B CN117270833 B CN 117270833B
Authority
CN
China
Prior art keywords
service
programming
call
calling
request
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
CN202311559911.3A
Other languages
English (en)
Other versions
CN117270833A (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.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information 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 Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202311559911.3A priority Critical patent/CN117270833B/zh
Publication of CN117270833A publication Critical patent/CN117270833A/zh
Application granted granted Critical
Publication of CN117270833B publication Critical patent/CN117270833B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • 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
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q30/00Commerce
    • G06Q30/06Buying, selling or leasing transactions
    • G06Q30/0601Electronic shopping [e-shopping]
    • G06Q30/0633Lists, e.g. purchase orders, compilation or processing
    • G06Q30/0635Processing of requisition or of purchase orders
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/544Remote

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Business, Economics & Management (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Accounting & Taxation (AREA)
  • Finance (AREA)
  • Development Economics (AREA)
  • Economics (AREA)
  • Marketing (AREA)
  • Strategic Management (AREA)
  • General Business, Economics & Management (AREA)
  • Stored Programmes (AREA)

Abstract

一种服务调用及发布方法、介质和计算机设备,服务调用方法应用于第一服务调用***;第一服务调用***部署了基于第一编程语言开发的第一应用,用于提供跨语言的编程服务的第一编程组件,用于提供跨语言的远程调用管理服务的第一服务管理程序;方法包括:响应于第一应用对第二服务调用***中部署的目标服务的远程调用,调用第一编程组件,生成与基于第二编程语言开发的目标服务对应,且采用第一编程语言的服务调用代码;响应于获取到第一应用传递给服务调用代码的请求参数,进一步调用第一服务管理程序,以由第一服务管理程序基于请求参数生成采用第二编程语言的服务调用请求;将服务调用请求发送至第二服务调用***,以对目标服务进行远程调用。

Description

服务调用及发布方法、介质和计算机设备
技术领域
本公开涉及计算机技术领域,尤其涉及一种服务调用及发布方法、介质和计算机设备。
背景技术
服务调用***中可以部署应用,该应用可以是基于某种编程语言开发的。在进行远程服务调用时,一个服务调用***中部署的应用可以调用在另一个服务调用***中部署的应用所提供的服务。然而,不同服务调用***中部署的应用可能基于不同的编程语言实现。在相关技术中,为解决跨编程语言的应用之间的服务调用,需要采用跨编程语言的服务框架,并在上述服务框架中手动编写服务调用代码,这种方式代码开发和维护成本高。
发明内容
第一方面,本公开实施例提供一种服务调用方法,应用于第一服务调用***;其中,所述第一服务调用***部署了基于第一编程语言开发的第一应用,用于提供跨语言的编程服务的第一编程组件,以及用于提供跨语言的远程调用管理服务的第一服务管理程序;所述方法包括:响应于所述第一应用针对第二服务调用***中部署的目标服务的远程调用,调用所述第一编程组件,生成与所述目标服务对应的服务调用代码;所述服务调用代码为采用所述第一编程语言的代码;所述目标服务为基于第二编程语言开发的服务;获取所述第一应用传递给所述服务调用代码的请求参数;响应于获取到的所述请求参数,进一步调用所述第一服务管理程序,以由所述第一服务管理程序基于所述请求参数生成采用所述第二编程语言的服务调用请求;将所述服务调用请求发送至所述第二服务调用***,以对所述目标服务进行远程调用。
第二方面,本公开实施例提供一种服务调用方法,应用于第二服务调用***;其中,所述第二服务调用***部署了基于第二编程语言开发的目标服务,用于提供跨语言的编程服务的第二编程组件,以及用于提供跨语言的远程调用管理服务的第二服务管理程序;所述方法包括:获取所述第一服务调用***中部署的基于第一编程语言开发的第一应用,针对所述目标服务的服务调用请求;其中,所述服务调用请求携带所述第一应用传递给所述目标服务的请求参数;响应于所述服务调用请求,调用所述第二服务管理程序,以由所述第二服务管理程序解析出所述服务调用请求中携带的请求参数,将所述请求参数发送至所述第二编程组件,以调用所述第二编程组件,由所述第二编程组件基于所述请求参数发起针对所述目标服务的服务调用,得到基于所述第二编程语言的第二服务调用结果,并进一步调用所述第二服务管理程序,由所述第二服务管理程序将所述第二服务调用结果转换成采用所述第一编程语言的第一服务调用结果;将所述第一服务调用结果返回至所述第一服务调用***。
第三方面,本公开实施例提供一种服务发布方法,应用于第二服务调用***;其中,所述第二服务调用***部署了用于提供跨语言的编程服务的第二编程组件;与所述第二服务调用***对接的第一服务调用***中部署了基于第一编程语言开发的第一应用;所述方法包括:获取待发布的目标服务对应的服务代码;所述目标服务为基于所述第二服务调用***采用的第二编程语言开发的服务;调用所述第二编程组件,生成与所述目标服务对应的采用所述第一编程语言的服务代码;将所述服务代码发布至云端,以由所述第一应用进行远程调用。
第四方面,本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开任一实施例所述的方法。
第五方面,本公开实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现本公开任一实施例所述的方法。
在以上技术方案中,在跨语言编程的应用场景,通过在第一服务调用***中部署提供跨语言的编程服务的第一编程组件和提供跨语言的远程调用管理服务的第一服务管理程序,通过调用第一编程组件,可以根据第一服务调用***中部署的第一应用对应的第一编程语言生成对应的服务调用代码;通过调用第一服务管理程序,可以基于第一应用传递给服务调用代码的请求参数,生成与第二服务调用***中部署的目标服务采用的第二编程语言对应的服务调用请求。上述方式可以根据不同的编程语言自动生成对应的服务调用代码,无需手动编写复杂的服务调用代码,降低了跨编程语言的服务调用过程中的代码开发和维护成本。
应当理解,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。
附图说明
此处的附图被并入说明书中并构成本公开的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。
图1是本公开实施例的应用场景的示意图。
图2是本公开实施例的第一服务调用***的示意图。
图3是本公开实施例的服务调用方法的流程图。
图4是本公开实施例的第二服务调用***的示意图。
图5是本公开另一实施例的服务调用方法的流程图。
图6是本公开实施例的服务发布过程的示意图。
图7是本公开实施例的服务调用过程的示意图。
图8是本公开实施例的非Java应用调用Java应用发布的服务的过程的示意图。
图9是本公开实施例的Java应用调用非Java应用发布的服务的过程的示意图。
图10是本公开实施例的服务发布方法的流程图。
图11是本公开实施例的计算机设备的示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了使本技术领域的人员更好的理解本公开实施例中的技术方案,并使本公开实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本公开实施例中的技术方案作进一步详细的说明。
图1示例性地示出了本公开的应用场景的示意图。如图1所示,第一服务调用***20可以部署应用(以下称第一应用,也称为服务调用方,简称调用方),第二服务调用***40可以部署服务(以下称目标服务)。第二服务调用***40可以将目标服务注册到服务注册中心60,该过程称为服务注册。第一应用可以从服务注册中心60发现并调用目标服务(该过程称为服务发现)。
为便于理解,下面以订单服务调用库存服务为例进行说明。第一应用可以是提供订单服务的应用,用于基于用户提交的订单处理请求对商品订单进行处理,包括但不限于生成订单、取消订单、修改订单信息等;目标服务可以是第二服务调用***40中部署的应用(以下称第二应用,也称为服务发布方,简称发布方)所提供的服务,例如,可以是库存服务,用于查找和更新商品的库存信息。例如,在生成订单的过程中,在用户提交商品下单请求之后,第一应用可以调用库存服务,以查找商品的库存信息,若库存足够,则基于商品下单请求中携带的商品数量信息,从库存中扣除对应数量的商品。扣除成功后,第二服务调用***40可以向第一服务调用***20返回用于指示扣除成功的消息,从而第一应用可以通过其提供的订单服务生成商品订单。
可以理解,此处仅为示例性说明,除了以上列举的情况之外,本公开的第一服务调用***20和第二服务调用***40还可以根据实际需要部署提供其他服务的其他应用,此处不再一一列举。
在相关技术中,第一应用与目标服务可能基于不同的编程语言开发,例如,第一应用基于Java编程语言开发,目标服务基于Python编程语言开发;或者,第一应用基于Go编程语言开发,目标服务基于Java编程语言开发;或者,第一应用基于C编程语言开发,目标服务基于Go编程语言开发。在这种情况下,第一应用与目标服务无法直接通信,从而会导致服务调用失败。
基于此,本公开在第一服务调用***20中部署了面向第一应用提供跨语言的编程服务的第一编程组件202,以及面向第一应用提供跨语言的远程调用管理服务的第一服务管理程序204,如图2所示。在第一服务调用***20中部署有基于第一编程语言开发的第一应用,且第二服务调用***40中部署有基于第二编程语言开发的目标服务的情况下,第一编程组件202能够自动生成与目标服务对应的,采用第一编程语言的服务调用代码。例如,若第一编程语言为Java编程语言,则第一编程组件202能够自动生成与目标服务对应的,采用Java编程语言的服务调用代码;若第一编程语言为Python编程语言,则第一编程组件202能够自动生成与目标服务对应的,采用Python编程语言的服务调用代码。第一服务管理程序204能够实现第一应用与目标服务之间的消息传递,从而将服务调用代码发送到目标服务,以对目标服务进行服务调用。下面对本公开实施例的方案进行具体说明。
参见图3,本公开的服务调用方法应用于第一服务调用***20;其中,第一服务调用***20部署了基于第一编程语言开发的第一应用,用于提供跨语言的编程服务的第一编程组件202,以及用于提供跨语言的远程调用管理服务的第一服务管理程序204;所述方法包括:
步骤S202:响应于第一应用针对第二服务调用***40中部署的目标服务的远程调用,调用第一编程组件202,生成与目标服务对应的服务调用代码;服务调用代码为采用第一编程语言的代码;目标服务为基于第二编程语言开发的服务;
步骤S204:获取第一应用传递给服务调用代码的请求参数;
步骤S206:响应于获取到的请求参数,进一步调用第一服务管理程序204,以由第一服务管理程序204基于请求参数生成采用第二编程语言的服务调用请求;
步骤S208:将服务调用请求发送至第二服务调用***40,以对目标服务进行远程调用。
本公开实施例通过调用第一编程组件202,能够自动生成与开发第一应用的第一编程语言对应的服务调用代码,从而获取到第一应用传递给服务调用代码的请求参数。通过进一步调用第一服务管理程序204,能够基于请求参数生成与开发目标服务的第二编程语言对应的服务调用请求,并将服务调用请求发送至第二服务调用***40,从而实现对目标服务的调用。上述实施例无需手动编写复杂的服务调用代码,降低了跨编程语言的服务调用过程中的代码开发和维护成本。
在步骤S202中,第一应用为第一服务调用***20中部署的应用。第一应用基于第一编程语言开发,第一编程语言可以是Java、Python、Go、Node.js、Rust、web.JS等编程语言中的任意一种,本公开对此不作限制。第一应用可以通过远程调用的方式调用第二服务调用***40中部署的目标服务。目标服务可以是第二服务调用***中部署的第二应用发布的服务,第二应用可以是基于第二编程语言开发的应用。第二编程语言可以是不同于第一编程语言的任意一种编程语言。在第二应用基于第二编程语言开发的情况下,相应地,目标服务也是基于第二编程语言开发的服务。
第一应用可以响应于发生指定事件而对目标服务进行远程调用。指定事件可以是用户的操作事件。例如,在提供订单服务的应用调用库存服务的实施例中,指定事件为用户提交下单请求。或者,指定事件可以是本应用提供的服务被其他应用所调用而对目标服务进行远程调用。例如,在提供订单服务的应用调用库存服务的实施例中,订单服务可以被其他应用调用,在接收到其他应用对订单服务的调用请求之后,提供订单服务的应用可以调用库存服务。
可以响应于第一应用针对目标服务的远程调用,调用第一编程组件202,从而通过第一编程组件202生成与第一服务对应的、采用第一编程语言的服务调用代码。其中,第一编程组件202可以是oneAPI组件,该组件提供了统一的编程接口和工具。部署于第一服务调用***20的oneAPI组件可以与oneAPI服务端建立通信连接,并通过该通信连接从oneAPI服务端获取目标服务的服务元信息。其中,目标服务的服务元信息可以包括以下部分或全部:目标服务的标识信息(如目标服务的名称)、目标服务的入参、目标服务的入参类型、目标服务的返回值、目标服务的返回值类型。例如,在目标服务为库存服务的情况下,目标服务的名称为“库存服务”,目标服务的入参为商品ID,入参类型为字符串,目标服务的返回值为剩余商品数量,返回值类型为整型。
可以在第二服务调用***40中部署提供跨语言的编程服务的第二编程组件402,第二编程组件402可以与跨语言的编程服务端建立通信连接,并将目标服务的服务元信息上传至跨语言的编程服务端。具体来说,可以在包括目标服务的服务元信息的类文件中添加自定义的注解,第二服务调用***40可以对该类文件进行解析,并在解析到上述自定义的注解之后,调用与该自定义的注解对应的信息上传程序,将目标服务的服务元信息上传至跨语言的编程服务端。通过这种方式,第二服务调用***40在解析到自定义的注解之后,可以自动上传目标服务的服务元信息,无需用户操作和控制,提高了服务元信息的上传效率,减少了用户操作。
在第二编程组件402将目标服务的服务元信息上传至跨语言的编程服务端之后,第一编程组件202可以从跨语言的编程服务端中获取第二编程组件402上传的目标服务的服务元信息,并基于服务元信息生成与目标服务对应的、采用第一编程语言的服务调用代码,该服务调用代码中可以包括目标服务的标识信息、目标服务的入参和目标服务的入参类型。
由于跨语言的编程服务端中可能存储多个服务的服务元信息,因此,在从编程服务端获取目标服务对应的服务元信息之前,还可以获取与第一应用对应的第一配置信息,并基于第一配置信息确定目标服务。这样,第一应用可以基于第一配置信息确定从哪个应用的哪个接口对目标服务进行调用。例如,第一配置信息中可以包括提供目标服务的第二应用的名称,以及第二应用的接口信息。第一应用可以基于第二应用的名称确定提供目标服务的第二应用,并基于第二应用的接口信息确定从第二应用的哪个接口调用目标服务。
在步骤S204中,可以获取第一应用传递给服务调用代码的请求参数,请求参数可以包括前述实施例中目标服务的入参。请求参数可以由用户输入至第一应用,并由第一应用传递给服务调用代码。例如,在提供订单服务的应用调用库存服务的实施例中,请求参数包括商品ID,则第一应用可以将商品ID的字段值传递给服务调用代码中字段名为将商品ID的请求参数。
在步骤S206中,可以调用第一服务管理程序204来生成采用第二编程语言的服务调用请求。其中,第一服务管理程序可以是layotto服务程序。layotto服务程序提供了一组可移植的运行时API和工具,可用于处理分布式***中的常见问题,如状态管理、消息传递、服务调用、事件发布/订阅等。Layotto服务支持多种编程语言和云平台,并且可以与现有的应用程序和框架集成。通过使用Layotto服务,开发人员可以将更多的精力放在业务逻辑上,而不需要关注底层的分布式***细节。
具体地,可以响应于获取到的请求参数,调用第一编程组件202。第一编程组件202可以基于第一服务管理程序204支持的通用数据格式,将请求参数封装成第一参数描述文件,并将第一参数描述文件发送至第一服务管理程序204,以进一步调用第一服务管理程序204。第一服务管理程序204被调用后,可以从第一参数描述文件中解析出请求参数以及类文件的标识信息,并基于解析出的请求参数以及解析出的类文件的标识信息,生成采用第二编程语言的服务调用请求。
其中,请求参数在第一参数描述文件中通过第一占位符进行标识,请求参数所在的类文件的标识信息在第一参数描述文件中通过第二占位符进行标识。这样,可以从第一参数描述文件中解析出第一占位符标识的所述请求参数,以及第二占位符标识的所述类文件的标识信息。例如,可以将第一占位符表示为"$",将第二占位符表示为"$class"。请求参数的信息可以包括请求参数的字段名和字段值。由于请求参数的数量可能大于或等于1,因此,可以将各个请求参数的信息记录在一个结构体中。请求参数的字段名和字段值可以表示为键值对形式。通过第一占位符"$",可以标识包括各个请求参数的信息的结构体。请求参数所在的类文件的信息可以是请求参数所在的类文件的文件名。
在一些实施例中,通用数据格式包括JSON格式,第一参数描述文件包括JSON文件。该JSON文件可以表示为如下形式:
{
"$": {
"param1": "value1",
"param2": "value2",
"param3": "value3",
},
"$class": "XXXX",
}
其中,"param1"、"param2"和"param3"分别表示三个不同的请求参数的字段名,"value1"、"value2"和"value3"分别表示"param1"、"param2"和"param3"对应的请求参数的字段值,"XXXX"表示请求参数所在的类文件的文件名。
本实施例中,无论第一应用基于何种语言开发,均可以从第一应用的服务调用代码中提取出请求参数,并生成第一服务管理程序204支持的通用数据格式的第一参数描述文件,从而使第一服务管理程序204能够从第一参数描述文件中提取出请求参数,进而生成采用第二编程语言的服务调用请求。
在步骤S208中,在第一服务管理程序204在生成服务调用请求之后,第一服务调用***20可以将服务调用请求发送至第二服务调用***40中部署的第二应用,以调用第二应用提供的目标服务。其中,服务调用请求可以由第一服务管理程序204发送,也可以由第一服务调用***20中的其他组件发送。仍以提供订单服务的应用调用库存服务为例,并以服务调用请求由第一服务管理程序204发送为例,第一服务管理程序204可以将服务调用请求发送至提供库存服务的应用,以由提供库存服务的应用执行服务调用请求,对库存服务进行调用,从而查询订单中商品的库存信息。具体地,第一服务管理程序204可以将目标服务的服务名携带在服务调用请求中,并发送给第二应用。第二应用可以基于服务调用请求中携带的服务名,调用目标服务对应的服务函数,并将服务调用请求中携带的请求参数传递给服务函数,得到目标服务的服务调用结果。
在一些实施例中,还可以基于第二编程语言对应的序列化协议,对服务调用请求进行序列化处理,将序列化处理后的服务调用请求发送至第二服务调用***40。序列化处理是指将对象的信息转换为可存储或传输的形式的过程。序列化协议与编程语言相对应,例如,Java编程语言对应的序列化协议包括protobuf协议、hessian协议、JSON协议等。由于第一应用与第二应用基于不同的编程语言进行开发,因此,第一应用与第二应用采用的序列化协议可能是不同的,这就导致了第一应用与第二应用之间无法通信。本实施例通过将采用第一编程语言的服务调用代码转换为采用第二编程语言的服务调用请求,从而能够采用第一编程语言对应的序列化协议对服务调用请求进行序列化处理,进而实现了第一应用与第二应用之间的通信,实现了第一应用对第二应用所提供的目标服务的服务调用。
进一步地,第二应用在执行服务调用请求之后,可以得到调用结果,该调用结果为采用第一编程语言的调用结果。例如,在提供订单服务的第一应用调用第二应用提供的库存服务的实施例中,调用结果可以包括商品数量。在其他实施例中,调用结果也可以包括其他参数。
在获取到调用结果之后,可以调用第一服务管理程序204,以由第一服务管理程序204基于第一编程组件202支持的通用数据格式,将调用结果封装成第二参数描述文件,并将第二参数描述文件发送至第一编程组件202,以进一步调用第一编程组件202。第一编程组件202被调用后,可以从第二参数描述文件中解析出调用结果,并将调用结果返回第一应用。第二参数描述文件与前述实施例中的第一参数描述文件类似,此处不再赘述。
为了便于数据传输,第二服务调用***40发送的调用结果为基于与第二编程语言对应的序列化协议进行序列化处理后的调用结果。因此,在将调用结果封装成第二参数描述文件时,可以基于第二编程语言对应的序列化协议,对第二服务调用***40发送的调用结果进行反序列化处理,从而恢复出原始的调用结果,并基于第一编程组件202支持的通用数据格式,将反序列化处理之后的调用结果封装成第二参数描述文件,从而便于第一编程组件202进行解析。
在一些实施例中,第一服务调用***20和第二服务调用***40可以对接服务注册中心60。目标服务可以预先在服务注册中心60进行注册。在注册成功后,服务注册中心60可以存储目标服务的服务标识和目标服务在第二服务调用***40中的服务调用地址之间的关联关系。第一服务调用***20可以向服务注册中心60发送与目标服务对应的服务地址获取请求,并将目标服务的标识携带在服务地址获取请求中。服务注册中心60可以基于本中心存储的关联关系,向第一服务调用***20返回与目标服务的服务标识相关联的服务调用地址。这样,第一服务调用***20可以基于服务调用地址发起针对目标服务的服务调用,以将服务调用请求发送至目标服务。
在第二服务调用***40部署有第二编程组件402和第二服务管理程序404的实施例中,在进行服务注册时,可以调用第二编程组件402,以使第二编程组件402基于第二编程语言生成携带服务标识和服务调用地址的第一服务注册请求,并将第一服务注册请求发送至服务注册中心60,以使服务注册中心60从第一服务注册请求中解析出服务标识和服务调用地址,并对服务标识和服务调用地址进行关联存储。
在一些实施例中,可以将第一服务注册请求发送至第二服务管理程序404,以调用第二服务管理程序404,由第二服务管理程序404基于服务注册中心60采用的第三编程语言,将第一服务注册请求转换为第二服务注册请求,并将第二服务注册请求发送至服务注册中心60。服务注册中心60可以从第二服务注册请求中解析出服务标识和服务调用地址,并对服务标识和服务调用地址进行关联存储。如此,可以在服务注册中心60与第二应用基于不同的编程语言开发时,实现对第二应用提供的目标服务的服务注册。其中,第三编程语言与第一编程语言可以相同或不同,且第三编程语言不同于第二编程语言。在一具体应用场景中,第一编程语言和第三编程语言均为Java编程语言,第二编程语言为非Java编程语言。
上述实施例描述了在第一服务调用***20上部署编程组件202和第一服务管理程序204来实现跨编程语言的服务调用。除了这种方式,参见图4,还可以在第二服务调用***40上部署第二编程组件402和第二服务管理程序404来实现跨编程语言的服务调用。
参见图5,本公开实施例的服务调用方法应用于第二服务调用***40;其中,第二服务调用***40部署了基于第二编程语言开发的目标服务,用于提供跨语言的编程服务的第二编程组件402,以及用于提供跨语言的远程调用管理服务的第二服务管理程序404;所述方法包括:
步骤S302:获取第一服务调用***20中部署的基于第一编程语言开发的第一应用,针对目标服务的服务调用请求;其中,服务调用请求携带第一应用传递给所述目标服务的请求参数;
步骤S304:响应于服务调用请求,调用第二服务管理程序404,以由第二服务管理程序404解析出服务调用请求中携带的请求参数,将请求参数发送至第二编程组件402,以调用第二编程组件402,由第二编程组件402基于请求参数发起针对目标服务的服务调用,得到基于第二编程语言的第二服务调用结果,并进一步调用第二服务管理程序404,由第二服务管理程序404将第二服务调用结果转换成采用第一编程语言的第一服务调用结果;
步骤S306:将第一服务调用结果返回至第一服务调用***20。
在步骤S302中,第一应用可以向第二服务调用***40中部署的目标服务发送基于第一编程语言的服务调用请求。该目标服务可以是第二服务调用***40中部署的第二应用在第二服务调用***40中发布的服务,第二应用可以基于第二编程语言开发,相应地,目标服务也基于第二编程语言开发。服务调用请求中可以包括请求参数,该请求参数可以由第一服务调用***20中部署的第一应用传递给服务调用请求。
在步骤S304中,第二服务调用***40接收到服务调用请求之后,可以调用第二服务管理程序404,以由第二服务管理程序404从服务调用请求中解析出请求参数。第二服务管理程序404可以将请求参数发送至第二编程组件402,以调用第二编程组件402。具体地,第二服务管理程序404可以基于本程序所支持的通用数据格式,将请求参数封装成第一参数描述文件,并将第一参数描述文件发送给第二编程组件402。第一参数描述文件的实施例可参见前文,此处不再赘述。
第二编程组件402在被调用后,可以从第一参数描述文件中解析出请求参数,还可以调用目标服务对应的服务函数,并将请求参数传递给服务函数。具体地,第二服务管理程序404可以将目标服务的服务名封装在第一参数描述文件中发给第二编程组件402。第二编程组件402可以从第一参数文件中解析出目标服务的服务名,并基于目标服务的服务名调用目标服务对应的服务函数。例如,在目标服务为库存服务的情况下,目标服务对应的服务函数可以是查询函数,用于查询商品的剩余库存。
然后,可以通过第二应用执行目标服务对应的服务函数,得到基于第二编程语言的第二服务调用结果。其中,第二服务调用结果中可以包括返回参数。第二编程组件402可以基于第二服务管理程序404所支持的通用数据格式将该返回参数封装成第二参数描述文件,并将第二参数描述文件发送给第二服务管理程序404。第二服务管理程序404可以从第二参数描述文件中解析出返回参数,并基于返回参数生成采用第一编程语言的第一服务调用结果。第二参数描述文件的实施例可参见前文,此处不再赘述。
在步骤S306中,第二服务调用***40可以将第一服务调用结果返回至第一服务调用***20。具体地,可以由第二服务管理程序404或第二服务调用***40中的其他组件将第一服务调用结果返回至第一服务调用***20。在将第一服务调用结果返回至第一服务调用***20之前,第二服务管理程序404还可以基于与第二编程语言对应的序列化协议,对第一服务调用结果进行序列化处理。
在一些实施例中,第二服务调用***40可以对接服务注册中心60,并将目标服务注册到服务注册中心。服务注册的过程可参见前述实施例,此处不再赘述。
在一些实施例中,第一服务调用***20以及第二服务调用***40可以是采用了微服务框架的分布式服务***。第一服务调用***20以及第二服务调用***40中部署的应用(包括但不限于前述实施例中的第一应用和第二应用)均可以由若干分布式的服务组成,第一服务管理程序204和第二服务管理程序404为用于实现与上述若干服务对应的服务管理功能的服务管理程序。
在一具体实施例中,微服务框架为基于Sidecar架构的微服务框架,组成应用的若干分布式的服务为Sidecar架构下的主服务,第一服务管理程序204和第二服务管理程序404为Sidecar架构下的辅助服务。Sidecar是一种架构模式,它是指将一个应用程序划分为多个服务,每个服务都是一个独立的进程或容器,而Sidecar则是作为主服务的辅助服务运行的进程或容器。Sidecar的作用是处理主服务无法处理的一些额外功能,例如服务发现、负载均衡、安全认证、日志收集、监控和故障恢复等。使用Sidecar架构可以将这些额外功能与主服务分离开来,从而使得主服务的代码更加简洁、清晰,并使得这些额外功能易于管理和扩展。Sidecar模式在微服务架构中被广泛采用。在本公开中,采用Sidecar架构将服务调用逻辑(主服务)与序列化、反序列化、与oneAPI组件之间的消息传递等功能相分离。
在上述实施例中,第一编程语言可以是java编程语言,第二编程语言可以是java编程语言以外的任一其它编程语言。或者,第一编程语言可以是java编程语言以外的任一其它编程语言,第二编程语言可以是java编程语言。
其中,如果第一编程语言为java编程语言,则第一服务调用***20可以是基于Dubbo架构的分布式服务***。或者,如果第二编程语言为java编程语言,则第二服务调用***40可以是基于Dubbo架构的分布式服务***。Dubbo是一个高性能的基于Java的开源远程过程调用协议(Remote Procedure Call,RPC)框架。RPC允许应用程序通过网络请求其他程序或服务的资源或服务,而不需要了解底层网络细节。Dubbo支持多种协议和注册中心,可以轻松实现微服务架构中的服务之间的通信,并提供了负载均衡、服务降级、容错和监控等功能,适合于大规模分布式***的构建。
下面以第一服务调用***20和第二服务调用***40中的一者是基于Dubbo架构的分布式服务***为例,对本公开实施例的方案进行举例说明。Java编程语言实现的Dubbo已经成为了主流RPC框架之一,大量的Java应用都使用了Dubbo,但随着业务的发展,编程语言变得越来越多样性,比如深度学习的应用一般基于python编程语言开发,前端项目大多采用JavaScript编程语言开发,性能要求比较高的***大多采用C、C++等编程语言开发。如何实现与使用Dubbo框架的Java应用进行通信,成为了一个急需解决的问题。
此外,当前Dubbo框架支持了多种序列化方式,比如protobuf、hessian、JSON等方式,但因为JSON的性能问题,protobuf的pb文件同步问题,Java应用一般都会使用默认的hessian协议,但hessian协议因为是和Java编程语言强绑定的,这就导致了其它编程语言无法做到和Java应用进行通信。
目前,在Dubbo框架下基于非Java编程语言的应用与基于Java编程语言的应用之间的通信方式主要有以下两种:
(1)基于go语言实现了一套dubbo架构,称为dubbo-go,能够打通基于golang编程语言的应用与基于Java编程语言的应用之间的通信。但此方案仅支持golang语言,无法实现基于任意非Java编程语言的应用与基于Java编程语言的应用之间的通信,且需要手动编写Jar包给Java用户使用。调用服务时,需要手动编写调用的客户端代码。
(2)采用云原生网关。云原生网关提供Dubbo和http协议的转换能力,将http协议转换成Dubbo调用,再将Dubbo调用的返回转换成http的返回,该方案一般用于代理南北流量。此方案的主要缺点在于非Java语言无法发布Dubbo服务,调用Dubbo服务时,也只能通过调用网关http请求转换成Dubbo服务,不能像Java通过客户端代码直接调用。
通过采用本公开实施例,可以解决基于不同编程语言开发的应用之间的通信问题,从而支持基于任何编程语言开发的应用接入Dubbo生态,打通Dubbo生态,让任何语言都可以轻松实现服务的发布和订阅,且服务可以通过客户端代码进行直接调用。
本***的核心子***分为两部分,oneAPI组件(即第一编程组件202和第二编程组件402)、Layotto(即第一服务管理程序204和第二服务管理程序404)。首先oneAPI服务端存储了所有服务的服务元信息,包括服务名,服务的入参类型和返回值类型等信息。OneAPI***根据服务元信息自动生成对应编程语言的客户端代码(即服务调用代码),用户在本地可以直接通过oneAPI组件提供的工具生成调用和发布Dubbo服务的代码,然后通过函数调用的方式对服务进行访问。
***从功能上主要分为两方面,即服务发布和服务调用,如图6所示,oneAPI组件可以自动生成不同语言发布Dubbo服务的客户端代码,非Java编程语言的应用可以通过oneAPI进行Dubbo服务的发布,在通过oneAPI组件发布服务时,oneAPI会自动生成服务对应的Jar包,让Java语言开发者可以像调用Java服务一样调用非Java语言发布的Jar包(Dubbo服务)。
如图7所示,非Java语言调用Dubbo服务时,可以通过oneAPI组件自动生成服务调用的客户端代码,该代码可以是SDK代码,开发者可以通过该SDK代码实现Dubbo服务的调用。
Layotto***则约定了与oneAPI组件之间的通信方式和序列化方式,负责进行Hessian的序列化和反序列化逻辑,解决了多语言之间的序列化问题。因为Hessian的序列化方式强依赖于Java编程语言,因此Layotto***与oneAPI组件之间可以制定一套JSON规范来进行请求参数和返回值的描述。Layotto***和oneAPI组件之间约定了“$class”和“$”两个占位符分别表示类文件和类文件中的参数,用来进行序列化和反序列化的转化。
对于服务调用来说,第二服务调用***40(即发布方)可以将服务元信息上传至oneAPI服务端,并将目标服务发布到服务注册中心60,即,对目标服务进行服务注册。第一服务调用***20(即调用方)的oneAPI组件可以根据oneAPI服务端存储的服务元信息,生成对应的客户端代码(即服务调用代码),通过客户端代码能够获取用户传递的请求参数,oneAPI组件可以调用layotto***,并将请求参数包装成上述JSON描述传递给Layotto***。Layotto***负责将上述的JSON描述转换成对应的Hessian序列化数据并进行RPC请求。同样对于Dubbo返回值,Layotto***则会负责将返回的Hessian序列化返回值反序列化成上述的JSON描述返回给应用,如图8所示。
对于服务发布来说,第二服务调用***40(即发布方)可以通过oneAPI组件生成服务发布代码,并发布服务元信息至oneAPI服务端,还可以通过oneAPI组件调用layotto***,以通过layotto***将目标服务发布到服务注册中心60。第一服务调用***20(即调用方)可以对注册到服务注册中心60的服务进行服务发现和服务调用,layotto***可以将调用端的请求进行Hessian反序列化,并根据约定返回给应用(生成JSON文件),并将应用的返回值(同样封装为JSON文件)进行Hessian的序列化后,基于调用方的编程语言返回调用结果给调用方,流程如图9所示。oneAPI服务端还可以根据发布方上传的服务元信息生成Jar包,以便调用方进行调用。
图8和图9中的数字表示各步骤的执行顺序。应当说明的是,图中所示的步骤执行顺序仅为示例性说明。除了图中所示的顺序之外,还可以采用其他步骤执行顺序。例如,在图8中,发布方将服务发布到注册中心的步骤与调用方进行服务调用的步骤可以并行地执行;发布方将服务元信息上报到oneAPI的步骤与发布方将服务发布到注册中心的步骤可以并行地执行。
本公开采用了oneAPI组件和oneAPI客户端,oneAPI客户端存储了所有Dubbo服务的元信息,用户可以通过其命令行工具自动生成不同编程语言的客户端代码,让所有编程语言的开发者都可以简单地通过客户端代码调用实现Dubbo服务的调用和发布,解决了其他方案需要手动编写客户端代码的问题。
此外,本公开约定了oneAPI组件与Layotto***之间的通信协议和序列化方式,实现了将Dubbo的hessian序列化能力下沉到Sidecar中,解决了多语言之间序列化的问题。所有的编程语言都可以通过该***进行Dubbo服务的发布。
参见图10,本公开还提供一种服务发布方法,应用于第二服务调用***40;其中,第二服务调用***40部署了用于提供跨语言的编程服务的第二编程组件402;与第二服务调用***40对接的第一服务调用***20中部署了基于第一编程语言开发的第一应用;所述方法包括:
步骤S402:获取待发布的目标服务对应的服务代码;目标服务为基于第二服务调用***40采用的第二编程语言开发的服务;
步骤S404:调用第二编程组件402,生成与目标服务对应的采用第一编程语言的服务代码;
步骤S406:将服务代码用于发布至云端,以由第一应用进行远程调用。
在本公开实施例中,目标服务可以是第二服务调用***40中的应用(即前述实施例中的第二应用)提供的服务,第二应用和第二服务可以基于第二服务调用***40采用的第二编程语言开发。例如,在一应用场景中,第二应用为提供库存服务的应用,目标服务为库存服务。
在步骤S402中,第二服务调用***40可以获取基于第二编程语言开发的目标服务对应的服务代码。例如,第二编程语言可以是Python编程语言、Go编程语言等。
在步骤S404中,第二服务调用***40可以调用第二编程组件402,第二编程组件402可以是oneAPI组件等具有跨语言编程能力的组件,其能够生成与目标服务对应的采用第一编程语言的服务代码。第一编程语言与第二编程语言可以不同,例如,第一编程语言为Java编程语言。
在第二编程组件402为oneAPI组件的情况下,通过oneAPI组件可以生成第一编程语言的服务代码,并将服务代码发送给oneAPI服务端。oneAPI组件还可以将服务元信息上传至oneAPI服务端,以使oneAPI服务端根据服务元信息生成服务代码对应的代码文件包,如,Java服务代码对应的Jar包。
在步骤S406中,服务代码可以被发布至云端,例如,发布至云端的代码仓库,第一应用可以从代码仓库中直接调用步骤S404中生成的服务代码。接着前面的例子,oneAPI服务端在生成Jar包之后,可以将Jar包发布至代码仓库。
在其他实施例中,也可以在第二服务调用***40中生成服务代码对应的代码文件包,并由第二服务调用***40将代码文件包发布至代码仓库。
在上述实施例中,第一服务调用***20可以是基于Dubbo架构的分布式服务***,第二服务调用***40可以是基于其他架构的分布式服务***。第二编程组件402可以是oneAPI组件。通过上述方式,在服务发布时,可以自动生成与第一服务调用***20中部署的第一应用所采用的第一编程语言相适配的服务代码,从而使得所有编程语言的应用均可接入Dubbo架构,并被Dubbo架构下应用进行调用。上述方式无需手动编写服务代码,提高了服务发布的效率,降低了服务发布的复杂度。
本公开实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述任一实施例所述的方法。
图11示出了本公开实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1102、存储器1104、输入/输出接口1106、通信接口1108和总线1110。其中处理器1102、存储器1104、输入/输出接口1106和通信接口1108通过总线1110实现彼此之间在设备内部的通信连接。
处理器1102可以采用通用的中央处理器(Central Processing Unit,CPU)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本公开实施例所提供的技术方案。处理器1102还可以包括显卡,所述显卡可以是Nvidia titan X显卡或者10120Ti显卡等。
存储器1104可以采用只读存储器(Read Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、静态存储设备,动态存储设备等形式实现。存储器1104可以存储操作***和其他应用程序,在通过软件或者固件来实现本公开实施例所提供的技术方案时,相关的程序代码保存在存储器1104中,并由处理器1102来调用执行。
输入/输出接口1106用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1108用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1110包括一通路,在设备的各个组件(例如处理器1102、存储器1104、输入/输出接口1106和通信接口1108)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1102、存储器1104、输入/输出接口1106、通信接口1108以及总线1110,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本公开实施例方案所必需的组件,而不必包含图中所示的全部组件。
本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述任一实施例所述的方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本公开实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本公开实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机装置或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本公开中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本公开实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本公开实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本公开实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本公开实施例的保护范围。

Claims (21)

1.一种服务调用方法,应用于第一服务调用***;其中,所述第一服务调用***部署了基于第一编程语言开发的第一应用,用于提供跨语言的编程服务的第一编程组件,以及用于提供跨语言的远程调用管理服务的第一服务管理程序;所述方法包括:
响应于所述第一应用针对第二服务调用***中部署的目标服务的远程调用,调用所述第一编程组件,生成与所述目标服务对应的服务调用代码;所述服务调用代码为采用所述第一编程语言的代码;所述目标服务为基于第二编程语言开发的服务;
获取所述第一应用传递给所述服务调用代码的请求参数;
响应于获取到的所述请求参数,进一步调用所述第一服务管理程序,以由所述第一服务管理程序基于所述请求参数生成采用所述第二编程语言的服务调用请求;具体包括:响应于获取到的所述请求参数,调用所述第一编程组件,以由所述第一编程组件基于所述第一服务管理程序支持的通用数据格式,将所述请求参数封装成第一参数描述文件,并将所述第一参数描述文件发送至所述第一服务管理程序,以进一步调用所述第一服务管理程序,由所述第一服务管理程序从所述第一参数描述文件中解析出所述请求参数以及所述请求参数所在的类文件的标识信息,并基于解析出的所述请求参数以及解析出的所述类文件的标识信息,生成采用所述第二编程语言的服务调用请求;
将所述服务调用请求发送至所述第二服务调用***,以对所述目标服务进行远程调用。
2.根据权利要求1所述的方法,所述第二服务调用***中部署了用于提供跨语言的编程服务的第二编程组件;其中,所述第一编程组件和所述第二编程组件,均与跨语言的编程服务端建立了通信连接;
所述生成与所述目标服务对应的服务调用代码,包括:
基于所述通信连接从所述编程服务端上获取与所述目标服务对应的服务元信息;其中,所述服务元信息由所述第二编程组件通过所述通信连接上传至所述编程服务端;
基于所述服务元信息生成与所述目标服务对应的服务调用代码。
3.根据权利要求2所述的方法,所述基于所述通信连接从所述编程服务端上获取与所述目标服务对应的服务元信息之前,还包括:
获取与所述第一应用对应的第一配置信息,并基于所述第一配置信息确定所述目标服务。
4.根据权利要求1所述的方法,所述第一服务调用***为采用了微服务框架的分布式服务***;所述第一应用由若干分布式的服务组成;所述第一服务管理程序为用于实现与所述若干分布式的服务对应的服务管理功能的服务管理程序。
5.根据权利要求4所述的方法,所述微服务框架为基于Sidecar架构的微服务框架;组成所述第一应用的若干分布式的服务为所述Sidecar架构下的主服务;所述第一服务管理程序为所述Sidecar架构下的辅助服务。
6.根据权利要求1所述的方法,所述请求参数在所述第一参数描述文件中通过第一占位符进行标识,所述请求参数所在的类文件的标识信息在所述第一参数描述文件中通过第二占位符进行标识;
从所述第一参数描述文件中解析出所述请求参数以及所述类文件的标识信息,包括:
从所述第一参数描述文件中解析出所述第一占位符标识的所述请求参数,以及所述第二占位符标识的所述类文件的标识信息。
7.根据权利要求6所述的方法,所述通用数据格式包括JSON格式;所述第一参数描述文件包括JSON文件。
8.根据权利要求1所述的方法,所述将所述服务调用请求发送至所述第二服务调用***,包括:
基于所述第二编程语言对应的序列化协议,对所述服务调用请求进行序列化处理;
将序列化处理后的服务调用请求发送至所述第二服务调用***。
9.根据权利要求8所述的方法,所述方法还包括:
获取所述第二服务调用***发送的调用结果;其中,所述调用结果为采用所述第一编程语言的调用结果;
调用所述第一服务管理程序,以由所述第一服务管理程序基于所述第一编程组件支持的通用数据格式将所述调用结果封装成第二参数描述文件,并将所述第二参数描述文件发送至所述第一编程组件,以进一步调用所述第一编程组件,由所述第一编程组件从所述第二参数描述文件中解析出所述调用结果,并将所述调用结果返回所述第一应用。
10.根据权利要求9所述的方法,获取所述第二服务调用***发送的调用结果,包括:
获取所述第二服务调用***发送的,基于与所述第二编程语言对应的序列化协议进行序列化处理后的调用结果;
基于所述第一编程组件支持的通用数据格式将所述调用结果封装成第二参数描述文件,包括:
基于所述第二编程语言对应的序列化协议对所述第二服务调用***发送的调用结果进行反序列化处理,并基于所述第一编程组件支持的通用数据格式将反序列化处理之后的所述调用结果封装成第二参数描述文件。
11.根据权利要求1所述的方法,所述第一服务调用***和所述第二服务调用***对接了服务注册中心;所述目标服务在所述服务注册中心进行了注册;所述服务注册中心中存储了所述目标服务的服务标识和所述目标服务在所述第二服务调用***中的服务调用地址之间的关联关系;
所述将所述服务调用请求发送至所述第二服务调用***,包括:
向所述服务注册中心发送与所述目标服务对应的服务地址获取请求;其中,所述服务地址获取请求携带所述目标服务的服务标识;
获取所述服务注册中心返回的与所述目标服务的服务标识相关联的服务调用地址,并基于所述服务调用地址发起针对所述目标服务的服务调用,以将所述服务调用请求发送至所述目标服务。
12.根据权利要求11所述的方法,所述第二服务调用***中部署了基于第二编程语言开发的第二应用;所述目标服务为所述第二应用在所述第二服务调用***中发布的基于所述第二编程语言开发的服务;
基于所述服务调用地址发起针对所述目标服务的服务调用,以将所述服务调用请求发送至所述目标服务,包括:
将所述服务调用地址发送至所述第二服务调用***中部署的所述第二应用,以由所述第二应用进一步基于所述服务调用地址发起针对所述目标服务的服务调用,以将所述服务调用请求发送至所述目标服务。
13.根据权利要求11所述的方法,所述第二服务调用***中部署有用于提供跨语言的编程服务的第二编程组件,以及用于提供跨语言的远程调用管理服务的第二服务管理程序;
在所述服务注册中心注册所述目标服务,包括:
调用所述第二服务调用***中部署的所述第二编程组件,基于所述第二编程语言生成携带所述服务标识和所述服务调用地址的第一服务注册请求,并将所述第一服务注册请求发送至所述服务注册中心,以使所述服务注册中心从所述第一服务注册请求中解析出所述服务标识和所述服务调用地址,并对所述服务标识和所述服务调用地址进行关联存储。
14.根据权利要求13所述的方法,将所述第一服务注册请求发送至所述服务注册中心,以使所述服务注册中心从所述第一服务注册请求中解析出所述服务标识和所述服务调用地址,并对所述服务标识和所述服务调用地址进行关联存储,包括:
将所述第一服务注册请求发送至所述第二服务管理程序,以调用所述第二服务管理程序,由所述第二服务管理程序基于所述服务注册中心采用的第三编程语言,将所述第一服务注册请求转换为第二服务注册请求,并将所述第二服务注册请求发送至所述服务注册中心,以使所述服务注册中心从所述第二服务注册请求中解析出所述服务标识和所述服务调用地址,并对所述服务标识和所述服务调用地址进行关联存储。
15.根据权利要求1所述的方法,所述第一编程语言为java编程语言;所述第二编程语言为java编程语言以外的任一其它编程语言;或者,所述第一编程语言为java编程语言以外的任一其它编程语言;所述第二编程语言为java编程语言。
16.根据权利要求15所述的方法,如果所述第一编程语言为java编程语言,则所述第一服务调用***为基于Dubbo架构的分布式服务***;或者,如果所述第二编程语言为java编程语言,则所述第二服务调用***为基于Dubbo架构的分布式服务***。
17.根据权利要求1所述的方法,所述编程组件为oneAPI组件,所述服务管理程序为layotto服务程序。
18.一种服务调用方法,应用于第二服务调用***;其中,所述第二服务调用***部署了基于第二编程语言开发的目标服务,用于提供跨语言的编程服务的第二编程组件,以及用于提供跨语言的远程调用管理服务的第二服务管理程序;所述方法包括:
获取第一服务调用***中部署的基于第一编程语言开发的第一应用,针对所述目标服务的服务调用请求;其中,所述服务调用请求携带所述第一应用传递给所述目标服务的请求参数;
响应于所述服务调用请求,调用所述第二服务管理程序,以由所述第二服务管理程序解析出所述服务调用请求中携带的请求参数,将所述请求参数发送至所述第二编程组件,以调用所述第二编程组件,由所述第二编程组件基于所述请求参数发起针对所述目标服务的服务调用,得到基于所述第二编程语言的第二服务调用结果,并进一步调用所述第二服务管理程序,由所述第二服务管理程序将所述第二服务调用结果转换成采用所述第一编程语言的第一服务调用结果;具体包括:基于所述第二服务管理程序所支持的通用数据格式将所述第二服务调用结果中包括的返回参数封装成第二参数描述文件,并将所述第二参数描述文件发送给所述第二服务管理程序,以使所述第二服务管理程序从所述第二参数描述文件中解析出所述返回参数,并基于所述返回参数生成采用第一编程语言的第一服务调用结果;
将所述第一服务调用结果返回至所述第一服务调用***。
19.一种服务发布方法,应用于第二服务调用***;其中,所述第二服务调用***部署了用于提供跨语言的编程服务的第二编程组件;与所述第二服务调用***对接的第一服务调用***中部署了基于第一编程语言开发的第一应用;所述方法包括:
获取待发布的目标服务对应的服务代码;所述目标服务为基于所述第二服务调用***采用的第二编程语言开发的服务;
调用所述第二编程组件,生成与所述目标服务对应的采用所述第一编程语言的服务代码;
将所述服务代码发布至云端,以由所述第一应用进行远程调用。
20.一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现权利要求1至19任意一项所述的方法。
21.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现权利要求1至19任意一项所述的方法。
CN202311559911.3A 2023-11-21 2023-11-21 服务调用及发布方法、介质和计算机设备 Active CN117270833B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311559911.3A CN117270833B (zh) 2023-11-21 2023-11-21 服务调用及发布方法、介质和计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311559911.3A CN117270833B (zh) 2023-11-21 2023-11-21 服务调用及发布方法、介质和计算机设备

Publications (2)

Publication Number Publication Date
CN117270833A CN117270833A (zh) 2023-12-22
CN117270833B true CN117270833B (zh) 2024-04-26

Family

ID=89212808

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311559911.3A Active CN117270833B (zh) 2023-11-21 2023-11-21 服务调用及发布方法、介质和计算机设备

Country Status (1)

Country Link
CN (1) CN117270833B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108255615A (zh) * 2017-11-30 2018-07-06 平安科技(深圳)有限公司 跨语言调用方法、服务器及存储介质
CN108509282A (zh) * 2018-02-08 2018-09-07 厦门快商通信息技术有限公司 基于golang反射技术的rpc跨语言调用服务治理方法
CN113190362A (zh) * 2021-04-22 2021-07-30 北京达佳互联信息技术有限公司 服务调用方法、装置、计算机设备及存储介质
CN113296751A (zh) * 2021-05-17 2021-08-24 国电南瑞科技股份有限公司 一种基于json-rpc实现跨语言通讯的方法及***
CN113821352A (zh) * 2021-02-02 2021-12-21 北京沃东天骏信息技术有限公司 一种远程服务的调用方法和装置
CN113961179A (zh) * 2021-11-04 2022-01-21 杭州安恒信息技术股份有限公司 Soar平台的服务接入方法、***、电子装置和存储介质
CN116166457A (zh) * 2023-02-17 2023-05-26 北京字跳网络技术有限公司 数据处理方法及相关设备

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108255615A (zh) * 2017-11-30 2018-07-06 平安科技(深圳)有限公司 跨语言调用方法、服务器及存储介质
WO2019104973A1 (zh) * 2017-11-30 2019-06-06 平安科技(深圳)有限公司 跨语言调用方法、服务器及存储介质
CN108509282A (zh) * 2018-02-08 2018-09-07 厦门快商通信息技术有限公司 基于golang反射技术的rpc跨语言调用服务治理方法
CN113821352A (zh) * 2021-02-02 2021-12-21 北京沃东天骏信息技术有限公司 一种远程服务的调用方法和装置
CN113190362A (zh) * 2021-04-22 2021-07-30 北京达佳互联信息技术有限公司 服务调用方法、装置、计算机设备及存储介质
CN113296751A (zh) * 2021-05-17 2021-08-24 国电南瑞科技股份有限公司 一种基于json-rpc实现跨语言通讯的方法及***
CN113961179A (zh) * 2021-11-04 2022-01-21 杭州安恒信息技术股份有限公司 Soar平台的服务接入方法、***、电子装置和存储介质
CN116166457A (zh) * 2023-02-17 2023-05-26 北京字跳网络技术有限公司 数据处理方法及相关设备

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Han Ding Etc..A remote procedure call method for cross-platform mobile clients.2016 5th International Conference on Computer Science and Network Technology (ICCSNT).2016,全文. *
乌宝贵.基于个性化订制与跨语言搜索技术的网络信息服务平台.计算机应用与软件.2018,第35卷(第9期),全文. *
吴洲 ; .基于Thrift的跨编程语言Flex应用框架研究.计算机与现代化.2013,(05),全文. *

Also Published As

Publication number Publication date
CN117270833A (zh) 2023-12-22

Similar Documents

Publication Publication Date Title
US9606778B2 (en) System and method for meta-data driven, semi-automated generation of web services based on existing applications
US7587425B2 (en) Method and system for generating and employing a dynamic web services invocation model
US8099709B2 (en) Method and system for generating and employing a dynamic web services interface model
US7894431B2 (en) System and method for communicating asynchronously with web services using message set definitions
US20080282222A1 (en) Xml push and remote execution of a wireless applications
US8495594B2 (en) Method and system for providing a componentized resource adapter architecture
CN111176761A (zh) 微服务调用方法和装置
US10261877B2 (en) Systems and methods for testing mobile devices
US8972487B2 (en) Automated framework for testing enterprise services consumer technologies
US9665416B1 (en) Asynchronous execution of computer operations
CN109343970B (zh) 基于应用程序的操作方法、装置、电子设备及计算机介质
EP2400390A1 (en) Provision of services and libraries to remote clients
CN117270833B (zh) 服务调用及发布方法、介质和计算机设备
CN115567526B (zh) 数据监控方法、装置、设备及介质
US9858321B2 (en) Accessing application services from forms
Plebani et al. MicroMAIS: executing and orchestrating Web services on constrained mobile devices
EP1851622A1 (en) Extending access to local software of a wireless device
CN114567571B (zh) 性能测试方法、装置、电子设备和计算机可读存储介质
CN102694865A (zh) 一种Web Service服务端及其大批量数据传输方法
CN113918245A (zh) 一种数据调用方法、装置、设备及计算机可读存储介质
CN112540772B (zh) 应用发布方法及其***、电子设备、存储介质
CN114675821A (zh) 一种基于低代码的服务标准化***及方法
EP1851625A1 (en) Simulating an application for subsequent deployment to a device
CN114051058B (zh) 接口调用方法、平台、电子设备及计算机存储介质
CN117632445B (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