CN117539476A - 一种服务调用方法、装置、设备及存储介质 - Google Patents
一种服务调用方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN117539476A CN117539476A CN202311589631.7A CN202311589631A CN117539476A CN 117539476 A CN117539476 A CN 117539476A CN 202311589631 A CN202311589631 A CN 202311589631A CN 117539476 A CN117539476 A CN 117539476A
- Authority
- CN
- China
- Prior art keywords
- service
- source code
- target source
- flow chart
- code
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000004590 computer program Methods 0.000 claims description 16
- 230000006870 function Effects 0.000 claims description 12
- 238000010586 diagram Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 13
- 238000004891 communication Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 229910003460 diamond Inorganic materials 0.000 description 3
- 239000010432 diamond Substances 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000008030 elimination Effects 0.000 description 2
- 238000003379 elimination reaction Methods 0.000 description 2
- 230000005012 migration Effects 0.000 description 2
- 238000013508 migration Methods 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/10—Requirements analysis; Specification techniques
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种服务调用方法、装置、设备及存储介质,涉及计算机技术领域,包括:编排流程图,对流程图进行识别以确定流程图的循环结构,将循环结构进行消除,获取与流程图对应的有向无环图;识别有向无环图的分支结构并进行整合,基于整合后结构及有向无环图确定目标源代码;将目标源代码保存至预设的元数据库中,将已生成目标源代码的提示信息发送至消息队列,以便服务端从消息队列获取提示信息;将服务生成请求发送至服务端,以便服务端从元数据库中获取目标源代码并进行编译,将编译后代码发送至管理端;向服务端发送更新目标服务的通知信息,以便服务端对目标服务进行加载与调用。本申请根据编排的流程图,生成可被业务调用的服务并调用。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种服务调用方法、装置、设备及存储介质。
背景技术
随着微服务架构的兴起,加上税务的业务流程较为复杂,如果通过后端硬编码,那么费时又不直观。因此,需要通过图形化的方式,编排各微服务,并根据编排的流程图,动态生成可被业务调用的服务。因此如何把这么复杂的流程图转换成可执行的代码,并基于代码进行服务调用是本领域目前要解决的核心技术问题。
发明内容
有鉴于此,本发明的目的在于提供一种服务调用方法、装置、设备及存储介质,能够根据流程图动态生成代码,并实现代码动态编译与实时加载,其具体方案如下:
第一方面,本申请公开了一种服务调用方法,应用于管理端,包括:
基于预先配置的参数信息以及业务流程编排流程图,对所述流程图进行识别,以确定所述流程图的循环结构,将所述循环结构进行消除,获取与所述流程图对应的有向无环图;所述参数信息包括原子服务、自定义代码、自定义函数以及取数口径;
识别所述有向无环图的分支结构,将各所述分支结构分别进行整合,以得到整合后结构,基于所述整合后结构以及所述有向无环图确定目标源代码;
将所述目标源代码保存至预设的元数据库中,并将已生成所述目标源代码的提示信息发送至消息队列,以便服务端从所述消息队列获取所述提示信息;
将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求从所述元数据库中获取所述目标源代码,对所述目标源代码进行编译,获取编译后代码,并将所述编译后代码发送至管理端;
接收到所述编译后代码后向所述服务端发送更新目标服务的通知信息,以便所述服务端基于所述通知信息以及所述编译后代码对所述目标服务进行加载与调用。
可选的,所述对所述流程图进行识别,以确定所述流程图的循环结构,包括:
基于Tarjan算法对所述流程图进行识别,以确定所述流程图的循环结构。
可选的,所述将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求从所述元数据库中获取所述目标源代码,包括:
将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求中包含的源代码标识从所述元数据库中获取所述目标源代码。
可选的,所述对所述目标源代码进行编译,获取编译后代码,包括:
基于预设的javax.tools包对所述目标源代码进行编译,获取编译后代码。
可选的,所述对所述目标源代码进行编译之后,还包括:
若所述目标源代码编译未成功,则直接结束当前操作。
可选的,所述将所述编译后代码发送至管理端之后,还包括:
判断所述目标源代码是否编译成功;
若编译成功,则将所述目标源代码编译成功的结果信息以及所述编译后代码保存至所述元数据库;
若编译失败,则将所述目标源代码编译失败的结果信息保存至所述元数据库。
可选的,所述接收到所述编译后代码后向所述服务端发送更新目标服务的通知信息,以便所述服务端基于所述通知信息以及所述编译后代码对所述目标服务进行加载与调用之后,还包括:
通过所述服务端基于所述通知信息以及所述编译后代码更新自身对应的缓存信息,并将所述缓存信息与所述元数据库进行定时同步。
第二方面,本申请公开了一种服务调用装置,应用于管理端,包括:
流程图编排模块,用于基于预先配置的参数信息以及业务流程编排流程图;所述参数信息包括原子服务、自定义代码、自定义函数以及取数口径;
有向无环图获取模块,用于对所述流程图进行识别,以确定所述流程图的循环结构,将所述循环结构进行消除,获取与所述流程图对应的有向无环图;
目标源代码确定模块,用于识别所述有向无环图的分支结构,将各所述分支结构分别进行整合,以得到整合后结构,基于所述整合后结构以及所述有向无环图确定目标源代码;
提示信息获取模块,用于将所述目标源代码保存至预设的元数据库中,并将已生成所述目标源代码的提示信息发送至消息队列,以便服务端从所述消息队列获取所述提示信息;
编译后代码获取模块,用于将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求从所述元数据库中获取所述目标源代码,对所述目标源代码进行编译,获取编译后代码,并将所述编译后代码发送至管理端;
服务加载与调用模块,用于接收到所述编译后代码后向所述服务端发送更新目标服务的通知信息,以便所述服务端基于所述通知信息以及所述编译后代码对所述目标服务进行加载与调用。
第三方面,本申请公开了一种电子设备,包括:
存储器,用于保存计算机程序;
处理器,用于执行所述计算机程序,以实现前述的服务调用方法的步骤。
第四方面,本申请公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述的服务调用方法的步骤。
由上可知,本申请管理端首先基于预先配置的参数信息以及业务流程编排流程图,对所述流程图进行识别,以确定所述流程图的循环结构,将所述循环结构进行消除,获取与所述流程图对应的有向无环图;所述参数信息包括原子服务、自定义代码、自定义函数以及取数口径;之后所述有向无环图的分支结构,将各所述分支结构分别进行整合,以得到整合后结构,基于所述整合后结构以及所述有向无环图确定目标源代码;将所述目标源代码保存至预设的元数据库中,并将已生成所述目标源代码的提示信息发送至消息队列,以便服务端从所述消息队列获取所述提示信息;然后将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求从所述元数据库中获取所述目标源代码,对所述目标源代码进行编译,获取编译后代码,并将所述编译后代码发送至管理端;最终接收到所述编译后代码后向所述服务端发送更新目标服务的通知信息,以便所述服务端基于所述通知信息以及所述编译后代码对所述目标服务进行加载与调用。可见,本申请能够通过图形化的方式,编排各微服务,并根据编排的流程图,动态生成可被业务调用的服务,能够更方便简便地实现代码动态编译与实时加载,进而对服务进行调用。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种服务调用方法流程图;
图2为本申请公开的一种服务调用总体功能框架示意图;
图3为本申请公开的一种服务编译与加载总体设计示意图;
图4为本申请公开的一种对字节码输出的实现方法示意图;
图5为本申请公开的一种对source的输出实现方法示意图;
图6为本申请公开的一种结构化流程图;
图7为本申请公开的一种实际的业务流程图;
图8为本申请公开的一种数据结构示意图;
图9为本申请公开的一种数据结构示意图;
图10为本申请公开的一种消除循环后的业务流程图;
图11为本申请公开的一种对分支结构进行整合后的业务流程图;
图12为本申请公开的一种服务调用装置结构示意图;
图13为本申请公开的一种电子设备结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
随着微服务架构的兴起,加上税务的业务流程较为复杂,如果通过后端硬编码,那么费时又不直观。为了解决上述技术问题,本申请公开了一种服务调用方法,能够通过图形化的方式,编排各微服务,并根据编排的流程图,动态生成可被业务调用的服务。
参见图1所示,本发明实施例公开了一种服务调用方法,包括:
步骤S11、基于预先配置的参数信息以及业务流程编排流程图,对所述流程图进行识别,以确定所述流程图的循环结构,将所述循环结构进行消除,获取与所述流程图对应的有向无环图;所述参数信息包括原子服务、自定义代码、自定义函数以及取数口径。
本实施例中,本申请整体框架如图2所示,基于此框架,管理端首先对原子服务、自定义函数、代码及取数口径,根据业务流程进行应用流程编排,此时获取到了流程图。之后便需要对流程图进行解析以动态生成代码。因此对所述流程图进行识别,以确定所述流程图的循环结构,将所述循环结构进行消除,获取与所述流程图对应的有向无环图。在这里需要指出的是,基于Tarjan算法对所述流程图进行识别,以确定所述流程图的循环结构。流程图生成代码的核心思想是,流程图就是一个有向图,把图转换成一棵只有单边分支节点的树(整棵树只有左侧结点或者只有右侧节点),把树节点中的代码自上而下串起来就完成了转化过程。同时需要指出的是,选用java作为生成流程图的语言,这样一来,可应对复杂的编排场景,如在编排时可编写自定义Java代码块或调用已有的java工具类等,实现更多的编排能力,因此实现很灵活,可扩展性比较高,语言接受程度也要好些。
步骤S12、识别所述有向无环图的分支结构,将各所述分支结构分别进行整合,以得到整合后结构,基于所述整合后结构以及所述有向无环图确定目标源代码。
本实施例中,获取到有向无环图之后,识别出图中的分支结构,合成一个虚拟结点,其代码是分支结构内所有结点的代码组合,然后将各所述分支结构分别进行整合,以得到整合后结构。由上而下遍历图中的结点,取出代码,顺序存放,就是最后的代码了,也就得到了目标源代码。
步骤S13、将所述目标源代码保存至预设的元数据库中,并将已生成所述目标源代码的提示信息发送至消息队列,以便服务端从所述消息队列获取所述提示信息。
本实施例中,生成源代码并保存到数据库,同时,编排好服务后,将通过消息方式通知引擎,将已生成所述目标源代码的提示信息发送至消息队列,即告诉服务端服务已经编排完成,在收到调用请求时可直接进行服务调用。
步骤S14、将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求从所述元数据库中获取所述目标源代码,对所述目标源代码进行编译,获取编译后代码,并将所述编译后代码发送至管理端。
本实施例中,获取到目标源代码之后,服务端便可以进行服务编译与加载,如图3所示,管理端发出生成服务请求,这是同步请求,请求远程调用采用rpc(Remote ProcedureCall Protocol,远程过程调用协议)接口。将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求中包含的源代码标识从所述元数据库中获取所述目标源代码。然后基于预设的javax.tools包对所述目标源代码进行编译,获取编译后代码。其中,javax.tools包是一种添加到Java SE 6(Java Standard Edition,是Java平台的一部分,它提供了开发和运行Java程序所需的核心API和工具)的标准API(Application Programming Interface,应用程序编程接口),利用JDK(Java DevelopmentKit,软件开发工具包)中tool.jar可以实现将源代码编译成字节码。javax.tools包优点为:
1、标准化:它是经过认可的Java SE扩展,按照JSR 199规范开发的标准规范。
2、可扩展:只要根据标准可以进行扩展,不仅仅局限于像janino那样内存加载,也可以将class文件形式输入,或者将字节码保存到数据库。
3、利于移植:只要按照接口,可以在各种供应商实现之间移植,也支持向更高版本的移植。
4、当然和janino比最大的缺点就是性能低。
从以上优缺点综合考虑,由于编译发布的频率和即时性要求都不高,影响应用程序启动加载速度也可以通过非阻塞线程解决。所以最终选择javax.tools包对所述目标源代码进行编译。
目标源代码进行编译之后若所述目标源代码编译未成功,则直接结束当前操作。同时,编译后代码发送至管理端之后,判断所述目标源代码是否编译成功;若编译成功,则将所述目标源代码编译成功的结果信息以及所述编译后代码保存至所述元数据库;若编译失败,则将所述目标源代码编译失败的结果信息保存至所述元数据库。
步骤S15、接收到所述编译后代码后向所述服务端发送更新目标服务的通知信息,以便所述服务端基于所述通知信息以及所述编译后代码对所述目标服务进行加载与调用。
本实施例中,成功编译后,管理端接收引擎返回的javaclass(源代码),如果编译没通过,整个流程结束;管理端保存服务状态及javaclass到数据库;管理端发送更新服务的消息;集群中每台服务器都会收到消息,调用服务加载功能,更新缓存。另外,为了防止消息丢失,引擎提供定时任务同步缓存与数据库,如果缓存与数据库不同步,定时服务会调用服务加载功能,把服务对应的javaclass load到jvm,同时更新缓存,注意这步不会把javacode编译成javaclass,如果发现服务没有javaclass,定时任务直接跳过。
需要指出得是,在实现服务编译与加载的过程中,扩展JavaFileManager实现对java源文件和字节码的管理。对字节码输出的实现如图4所示,对source的输出如图5所示。
由上可知,本申请管理端首先基于预先配置的参数信息以及业务流程编排流程图,对所述流程图进行识别,以确定所述流程图的循环结构,将所述循环结构进行消除,获取与所述流程图对应的有向无环图;所述参数信息包括原子服务、自定义代码、自定义函数以及取数口径;之后所述有向无环图的分支结构,将各所述分支结构分别进行整合,以得到整合后结构,基于所述整合后结构以及所述有向无环图确定目标源代码;将所述目标源代码保存至预设的元数据库中,并将已生成所述目标源代码的提示信息发送至消息队列,以便服务端从所述消息队列获取所述提示信息;然后将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求从所述元数据库中获取所述目标源代码,对所述目标源代码进行编译,获取编译后代码,并将所述编译后代码发送至管理端;最终接收到所述编译后代码后向所述服务端发送更新目标服务的通知信息,以便所述服务端基于所述通知信息以及所述编译后代码对所述目标服务进行加载与调用。可见,本申请能够通过图形化的方式,编排各微服务,并根据编排的流程图,动态生成可被业务调用的服务,能够更方便简便地实现代码动态编译与实时加载,进而对服务进行调用。
基于上述实施例可知,本申请可以根据编排的流程图动态生成代码。接下来,将针对基于流程图生成代码的过程进行具体的描述。
一个结构化的流程图如图6所示,流程图生成代码的核心思想是,流程图就是一个有向图,把图转换成一棵只有单边分支节点的树(整棵树只有左侧结点或者只有右侧节点),把树节点中的代码自上而下串起来就完成了转化过程。分如下几步走,识别出流程图中的循环结构,消除循环结构(删除循环结束结点指向循环开始结点的箭头),循环消除后,原图就成了一个有向无环图(DAG图),在DAG图中识别出分支结构,把一个分支结构做为一个整体流程元素对待,则整个图就是一棵单边树了,从开始节点遍历这棵树上的,把节点上的代码自上而下串起来,代码生成。
针对如何识别循环来说,在图论中,循环结构必然是极大强连通子图,识别出极大强连通子图,消除循环,则整个图就剩下分支结构了。如果存在嵌套循环,则只要把消除了循环的子图做嵌套识别和消除就可以了。
如何识别分支结构:分支结构以菱形框开始,在最近的路径交汇点结束,在消除循环后,流程图中的一般节点只有一个入度和一个出度,如果一个节点有两个以上的入度,必然是分支结构结束的交汇点。
另外,需要设计数据结构,设计数据结构有两重目的,一是方便实现上述的算法,二是方便前端组织数据。考虑到流程图是一种稀疏图,以链表的方式来保存流程图结构数据。以实际的业务流程图(图7)为例,设计的数据结构如图(图8和图9)所示:其中图8为一个顶点对象数组,把流程图的顶点都罗列一遍(顺序随意),顶点对象的内容如下:
图9为链表数组,保存着流程图的有向边(箭头)的信息,图8和图9隐含着一一对应关系。图9中的列是一个链表,每个链表中的值是一个数字,来自于上一个数组对象的下标,代表向边信息。以第二列为例,代表着两条边:1)是否新办户->初始化核票信息;2)是否新办户->获取核票信息,这里的新办户的下标信息在链表中是不保存的。所以,结束结点没有指向其他顶点的边,在它所在的位置,就是一个空链表。
对于菱形结构,存在权重信息,额外再加一个有向边对象组成的数组来保存。代码结构下:
明白了上述技术原理后,在一种具体的实施例中,使用Tarjan算法识别出循环,消除回边,同时,把循环结束的边做一下修改,原来是由菱形(循环开始)结点指向循环结束后结点,改为循环结束结点直接指向循环结束后结点,生成如下图10。然后识别出图中的分支结构,合成一个虚拟结点,其代码是分支结构内所有结点的代码组合,生成如下图11所示;由上而下遍历图11中的结点,取出代码,顺序存放,就是最后的代码了。
这样一来,本申请复杂的流程图转换成可执行的代码,省时又直观,进而能够更方便简便地实现代码动态编译与实时加载,进而对服务进行调用。
参见图12所示,本发明实施例公开了一种服务调用装置,包括:
流程图编排模块11,用于基于预先配置的参数信息以及业务流程编排流程图;所述参数信息包括原子服务、自定义代码、自定义函数以及取数口径;
有向无环图获取模块12,用于对所述流程图进行识别,以确定所述流程图的循环结构,将所述循环结构进行消除,获取与所述流程图对应的有向无环图;
目标源代码确定模块13,用于识别所述有向无环图的分支结构,将各所述分支结构分别进行整合,以得到整合后结构,基于所述整合后结构以及所述有向无环图确定目标源代码;
提示信息获取模块14,用于将所述目标源代码保存至预设的元数据库中,并将已生成所述目标源代码的提示信息发送至消息队列,以便服务端从所述消息队列获取所述提示信息;
编译后代码获取模块15,用于将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求从所述元数据库中获取所述目标源代码,对所述目标源代码进行编译,获取编译后代码,并将所述编译后代码发送至管理端;
服务加载与调用模块16,用于接收到所述编译后代码后向所述服务端发送更新目标服务的通知信息,以便所述服务端基于所述通知信息以及所述编译后代码对所述目标服务进行加载与调用。
由上可知,本申请管理端首先基于预先配置的参数信息以及业务流程编排流程图,对所述流程图进行识别,以确定所述流程图的循环结构,将所述循环结构进行消除,获取与所述流程图对应的有向无环图;所述参数信息包括原子服务、自定义代码、自定义函数以及取数口径;之后所述有向无环图的分支结构,将各所述分支结构分别进行整合,以得到整合后结构,基于所述整合后结构以及所述有向无环图确定目标源代码;将所述目标源代码保存至预设的元数据库中,并将已生成所述目标源代码的提示信息发送至消息队列,以便服务端从所述消息队列获取所述提示信息;然后将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求从所述元数据库中获取所述目标源代码,对所述目标源代码进行编译,获取编译后代码,并将所述编译后代码发送至管理端;最终接收到所述编译后代码后向所述服务端发送更新目标服务的通知信息,以便所述服务端基于所述通知信息以及所述编译后代码对所述目标服务进行加载与调用。可见,本申请能够通过图形化的方式,编排各微服务,并根据编排的流程图,动态生成可被业务调用的服务,能够更方便简便地实现代码动态编译与实时加载,进而对服务进行调用。
在一些具体的实施例中,所述流程图编排模块11,具体可以包括:
循环结构确定单元,用于基于Tarjan算法对所述流程图进行识别,以确定所述流程图的循环结构。
在一些具体的实施例中,所述目标源代码确定模块13,具体可以包括:
目标源代码获取单元,用于将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求中包含的源代码标识从所述元数据库中获取所述目标源代码。
在一些具体的实施例中,所述编译后代码获取模块15,具体可以包括:
编译后代码获取单元,用于基于预设的javax.tools包对所述目标源代码进行编译,获取编译后代码。
在一些具体的实施例中,所述装置,还可以用于判断所述目标源代码是否编译成功;若编译成功,则将所述目标源代码编译成功的结果信息以及所述编译后代码保存至所述元数据库;若编译失败,则将所述目标源代码编译失败的结果信息保存至所述元数据库。
在一些具体的实施例中,所述装置,还可以用于通过所述服务端基于所述通知信息以及所述编译后代码更新自身对应的缓存信息,并将所述缓存信息与所述元数据库进行定时同步。
进一步的,本申请实施例还公开了一种电子设备,图13是根据一示例性实施例示出的电子设备20结构图,图中的内容不能认为是对本申请的使用范围的任何限制。
图13为本申请实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的服务调用方法中的相关步骤。另外,本实施例中的电子设备20具体可以为电子计算机。
本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本申请技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源可以包括操作系统221、计算机程序222等,存储方式可以是短暂存储或者永久存储。
其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,其可以是Windows Server、Netware、Unix、Linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的服务调用方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。
进一步的,本申请还公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述公开的服务调用方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的技术方案进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种服务调用方法,其特征在于,应用于管理端,包括:
基于预先配置的参数信息以及业务流程编排流程图,对所述流程图进行识别,以确定所述流程图的循环结构,将所述循环结构进行消除,获取与所述流程图对应的有向无环图;所述参数信息包括原子服务、自定义代码、自定义函数以及取数口径;
识别所述有向无环图的分支结构,将各所述分支结构分别进行整合,以得到整合后结构,基于所述整合后结构以及所述有向无环图确定目标源代码;
将所述目标源代码保存至预设的元数据库中,并将已生成所述目标源代码的提示信息发送至消息队列,以便服务端从所述消息队列获取所述提示信息;
将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求从所述元数据库中获取所述目标源代码,对所述目标源代码进行编译,获取编译后代码,并将所述编译后代码发送至管理端;
接收到所述编译后代码后向所述服务端发送更新目标服务的通知信息,以便所述服务端基于所述通知信息以及所述编译后代码对所述目标服务进行加载与调用。
2.根据权利要求1所述的服务调用方法,其特征在于,所述对所述流程图进行识别,以确定所述流程图的循环结构,包括:
基于Tarjan算法对所述流程图进行识别,以确定所述流程图的循环结构。
3.根据权利要求1所述的服务调用方法,其特征在于,所述将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求从所述元数据库中获取所述目标源代码,包括:
将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求中包含的源代码标识从所述元数据库中获取所述目标源代码。
4.根据权利要求1所述的服务调用方法,其特征在于,所述对所述目标源代码进行编译,获取编译后代码,包括:
基于预设的javax.tools包对所述目标源代码进行编译,获取编译后代码。
5.根据权利要求1所述的服务调用方法,其特征在于,所述对所述目标源代码进行编译之后,还包括:
若所述目标源代码编译未成功,则直接结束当前操作。
6.根据权利要求1所述的服务调用方法,其特征在于,所述将所述编译后代码发送至管理端之后,还包括:
判断所述目标源代码是否编译成功;
若编译成功,则将所述目标源代码编译成功的结果信息以及所述编译后代码保存至所述元数据库;
若编译失败,则将所述目标源代码编译失败的结果信息保存至所述元数据库。
7.根据权利要求1至6任一项所述的服务调用方法,其特征在于,所述接收到所述编译后代码后向所述服务端发送更新目标服务的通知信息,以便所述服务端基于所述通知信息以及所述编译后代码对所述目标服务进行加载与调用之后,还包括:
通过所述服务端基于所述通知信息以及所述编译后代码更新自身对应的缓存信息,并将所述缓存信息与所述元数据库进行定时同步。
8.一种服务调用装置,其特征在于,应用于管理端,包括:
流程图编排模块,用于基于预先配置的参数信息以及业务流程编排流程图;所述参数信息包括原子服务、自定义代码、自定义函数以及取数口径;
有向无环图获取模块,用于对所述流程图进行识别,以确定所述流程图的循环结构,将所述循环结构进行消除,获取与所述流程图对应的有向无环图;
目标源代码确定模块,用于识别所述有向无环图的分支结构,将各所述分支结构分别进行整合,以得到整合后结构,基于所述整合后结构以及所述有向无环图确定目标源代码;
提示信息获取模块,用于将所述目标源代码保存至预设的元数据库中,并将已生成所述目标源代码的提示信息发送至消息队列,以便服务端从所述消息队列获取所述提示信息;
编译后代码获取模块,用于将服务生成请求发送至所述服务端,以便所述服务端基于所述提示信息以及所述服务生成请求从所述元数据库中获取所述目标源代码,对所述目标源代码进行编译,获取编译后代码,并将所述编译后代码发送至管理端;
服务加载与调用模块,用于接收到所述编译后代码后向所述服务端发送更新目标服务的通知信息,以便所述服务端基于所述通知信息以及所述编译后代码对所述目标服务进行加载与调用。
9.一种电子设备,其特征在于,包括:
存储器,用于保存计算机程序;
处理器,用于执行所述计算机程序,以实现如权利要求1至7任一项所述的服务调用方法的步骤。
10.一种计算机可读存储介质,其特征在于,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的服务调用方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311589631.7A CN117539476A (zh) | 2023-11-27 | 2023-11-27 | 一种服务调用方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311589631.7A CN117539476A (zh) | 2023-11-27 | 2023-11-27 | 一种服务调用方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117539476A true CN117539476A (zh) | 2024-02-09 |
Family
ID=89789671
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311589631.7A Pending CN117539476A (zh) | 2023-11-27 | 2023-11-27 | 一种服务调用方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117539476A (zh) |
-
2023
- 2023-11-27 CN CN202311589631.7A patent/CN117539476A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9811360B2 (en) | Dynamic determination of application server runtime classloading | |
US20040003388A1 (en) | Preparation of a software configuration using an XML type programming language | |
US7987454B2 (en) | System and method for emulating the processing of java server pages | |
US10089084B2 (en) | System and method for reusing JavaScript code available in a SOA middleware environment from a process defined by a process execution language | |
CN111857801B (zh) | 一种移动应用的构建方法 | |
CN113515278A (zh) | 低代码模型处理方法、系统、电子设备及存储介质 | |
CN112269565A (zh) | 基于容器的边缘设备运行方法、装置和系统 | |
US6513153B1 (en) | Automatically integrating and executing application software modules | |
US8332493B2 (en) | Directory server plug-in call ordering | |
CN110457013B (zh) | 程序组件配置装置及方法 | |
CN108694049B (zh) | 一种更新软件的方法和设备 | |
CN111506309B (zh) | 任务执行方法和系统、计算机可读存储介质 | |
CN112256351B (zh) | Feign组件的实现方法、微服务调用方法及装置 | |
CN113360156B (zh) | 一种ios编译方法及相关设备 | |
KR102141749B1 (ko) | App 프로그램 실행 방법 및 장치 | |
US10268496B2 (en) | System and method for supporting object notation variables in a process defined by a process execution language for execution in a SOA middleware environment | |
US10223143B2 (en) | System and method for supporting javascript as an expression language in a process defined by a process execution language for execution in a SOA middleware environment | |
CN117539476A (zh) | 一种服务调用方法、装置、设备及存储介质 | |
CN111338685B (zh) | 一种公用组件配置方法、装置、设备和存储介质 | |
CN116680003A (zh) | 前端插件化系统 | |
CN108536429B (zh) | 一种开发软件的方法、装置、存储介质及电子设备 | |
CN113590179B (zh) | 插件检测方法、装置、电子设备及存储介质 | |
CN113626071B (zh) | 函数注册方法、系统、电子设备及存储介质 | |
CN115291933A (zh) | 小程序数据包构建方法、装置、设备及存储介质 | |
CN111124386B (zh) | 基于Unity的动画事件处理方法、装置、设备和存储介质 |
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 |