CN110764752B - 实现Restful服务图形化服务编排的系统及其方法 - Google Patents
实现Restful服务图形化服务编排的系统及其方法 Download PDFInfo
- Publication number
- CN110764752B CN110764752B CN201911085696.1A CN201911085696A CN110764752B CN 110764752 B CN110764752 B CN 110764752B CN 201911085696 A CN201911085696 A CN 201911085696A CN 110764752 B CN110764752 B CN 110764752B
- Authority
- CN
- China
- Prior art keywords
- service
- arrangement
- orchestration
- restful
- file
- 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
Links
Images
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/34—Graphical or visual programming
-
- 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/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
- G06F9/548—Object oriented; Remote method invocation [RMI]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明涉及一种基于微服务架构实现Restful服务图形化服务编排的系统,包括服务编排定义模块,用于定义服务编排规格、调用图元;服务编排加载引擎模块,用于实时编译文件以及转换文件;服务编排执行引擎模块,用于调用同系统不同微服务或跨系统间的Restful服务;服务编排热更新模块,用于动态监听服务编排资源的变化。本发明还涉及一种实现基于微服务架构的Restful服务图形化服务编排处理方法。采用了本发明的基于微服务架构实现Restful服务图形化服务编排的系统及其方法,实现了服务编排过程更加直观、简单高效;同时减少了开发人员对复杂的代码编写,降低服务编排出错的可能;另外还支持服务编排的不停机的发布,及时快速响应业务变化。
Description
技术领域
本发明涉及计算机领域,尤其涉及微服务架构领域,具体是指一种基于微服务架构实现Restful服务图形化服务编排的系统及其方法。
背景技术
随着数字化转型的迅猛发展,公司、组织业务的不断扩张,需求不断的增加、用户量不断增加,传统单体架构已经无法适应云计算时代应用的快速变化,面临着越来越多的挑战;微服务架构则被认为是未来建设新一代分布式架构应用的方向,通过将应用和服务分解成更小的、松散耦合的组件,它们可以更加容易升级和扩展。同时企业应用更多的从服务内部用户转向服务外部客户,Restful风格的API逐渐成为企业打通上下游用户的重要一环,企业需要将不同的Restful风格的API进行快速编排,组装成各种产品或服务对内外部用户提供个性化的产品服务。
针对目前微服务架构下Restful服务的服务编排技术,在获取Restful风格的API的接口声明后,通过硬编码的方式来组装,进而实现对不同Restful服务的服务组装,具体实现步骤如下:
1、获取需要调用的所有的Restful服务的服务契约声明,包括Restful服务1和Restful服务2的服务契约;
2、编写业务代码程序;
3、通过SpringCloud的Feign客户端或者Spring的RestTemplate在业务代码程序中编码方式调用Restful服务1;
4、Restful服务1的调用如果发生异常,则终止当前业务代码程序;Restful服务1的调用如果正常返回,在业务代码程序中接受Restful服务1的返回值并处理;
5、通过SpringCloud的Feign客户端或者Spring的RestTemplate在业务代码程序中编码方式调用Restful服务2;
6、Restful服务2的调用如果发生异常,则终止当前业务代码程序;Restful服务2的调用如果正常返回,在业务代码程序中接受Restful服务2的返回值并处理;
7、继续处理业务代码程序;
根据以上步骤通过编码的方式实现了Restful服务的服务编排,将不同的Restful服务聚合在一起提供新的服务能力。
以下针对上面的技术实现方式分析对应的不足:
不足1:编码方式过程复杂、易出错:采用硬编码方式,开发人员需要了解调用接口详细规格,处理各种异常情况、同步或者异步调用Restful服务,进行大量复杂的代码开发,编排过程不直观,且容易出错,对开发人员的要求非常高;
不足2:无法做到停机发布:由于采用了硬编码的方式,在业务需求变化的时候,需要重新编写代码,并打包发布,在Java领域发布新的类文件,必须重启,无法做到服务编排资源的热更新,无法做到不停机发布;
不足3:无法及时响应业务变化:在业务需求发生变化时,需要快速高效的对新的业务需求通过服务编排的方式将产品发布出来,采用硬编码方式导致编排发布时间长,无法及时的响应企业业务需求。
发明内容
本发明的目的是克服了上述现有技术的缺点,提供了一种满足高效性、可靠性、简单直观的基于微服务架构实现Restful服务图形化服务编排的系统及其方法。
为了实现上述目的,本发明的基于微服务架构实现Restful服务图形化服务编排的系统及其方法如下:
该基于微服务架构实现Restful服务图形化服务编排的系统,其主要特点是,所述的系统包括:
服务编排定义模块,用于定义服务编排规格、调用图元,以及不同图元之间的流转规则;
服务编排加载引擎模块,与所述的服务编排定义模块相连接,用于实时编译文件以及转换文件;
服务编排执行引擎模块,与所述的服务编排加载引擎模块相连接,用于调用同系统不同微服务或跨系统间的Restful服务;
服务编排热更新模块,与所述的服务编排执行引擎模块相连接,用于动态监听服务编排资源的变化,并通过自定义的类加载器加载机制实现服务编排的热更新。
较佳地,所述的服务编排定义模块包括:
服务编排规格单元,用于定义服务编排变量、服务编排参数和服务编排返回值;
服务图元单元,与所述的服务编排规格单元相连接,用于定义服务编排支持的图元;
连线规则单元,与所述的服务图元单元相连接,用于定义服务编排连线规则;
调用规格单元,与所述的连线规则单元相连接,用于定义具体服务图元的调用规格;
服务编排动作单元,与所述的调用规格单元相连接,用于根据定义的服务编排规范,完成具体的服务编排动作;
生成文件单元,与所述的服务编排动作单元相连接,用于生成并保存完成的服务编排文件。
较佳地,所述的服务编排支持的图元包括开始图元、结束图元、赋值图元、循环图元、子服务编排图元、本地处理图元、SpringBean调用图元、Restful调用图元和注释图元。
较佳地,所述的服务编排连线规则包括连接线、退出线和异常线。
该利用上述系统实现基于微服务架构的Restful服务图形化服务编排处理方法,其主要特点是,所述的方法包括以下步骤:
(1)所述的服务编排定义模块定义服务编排规格、调用图元,以及不同图元之间的流转规则,并生成XML文件;
(2)所述的服务编排加载引擎模块将服务编排定义模块生成的XML文件转换为Java文件,实时编译成Java类文件;
(3)所述的服务编排执行引擎模块直接调用同系统内不同微服务间的Restful服务,或通过网关调用跨系统的Restful服务;
(4)所述的服务编排热更新模块动态监听服务编排资源的变化,通过自定义实现的类加载器加载机制实现服务编排的热更新。
较佳地,所述的步骤(2)具体包括以下步骤:
(2.1)解析服务编排XML文件,加载为Java模型对象;
(2.2)生成服务编排的Java文件;
(2.3)生成用于调试的SMAP文件,并生成Java源代码的行号信息;
(2.4)将Java文件编译为Java类文件,并将SMAP文件合并到Java类文件中;
(2.5)定义自定义类加载器,将服务编排的Java类文件加载到JVM堆栈中。
较佳地,所述的步骤(4)具体包括以下步骤:
(4.1)改变监听服务编排文件资源;
(4.2)判断服务编排文件资源的时间戳是否发生变化,如果是,则继续步骤(4.3);否则,放弃本次事件;
(4.3)设置当前服务编排的服务调用状态为停用;
(4.4)判断变化的服务编排资源状态是新增、修改还是删除,如果是新增或修改,则继续步骤(4.5);否则,放弃本次事件;
(4.5)加载变化的服务编排资源文件,记录新的服务编排的时间戳;
(4.6)设置当前服务编排的服务调用状态为可用,允许接收外部请求;
(4.7)接收外部服务的调用,使当前的服务编排可用。
采用了本发明的基于微服务架构实现Restful服务图形化服务编排的系统及其方法,实现了Restful服务的图形化服务编排、高效运行模式、热加载能力,从而实现了服务编排过程更加直观、简单高效;同时减少了开发人员对复杂的代码编写,降低服务编排出错的可能;另外还支持服务编排的不停机的发布,及时快速响应业务变化。
附图说明
图1为本发明的基于微服务架构实现Restful服务图形化服务编排的系统的模块示意图。
图2为本发明的基于微服务架构实现Restful服务图形化服务编排的系统的服务编排定义模块示意图。
图3为本发明的实现基于微服务架构的Restful服务图形化服务编排处理方法的服务编排加载引擎模块操作的步骤流程图。
图4为本发明的实现基于微服务架构的Restful服务图形化服务编排处理方法的服务编排热更新模块操作的步骤流程图。
图5为本发明的基于微服务架构实现Restful服务图形化服务编排的系统及方法的实施例的需要组合编排的场景1示意图。
图6为本发明的基于微服务架构实现Restful服务图形化服务编排的系统及方法的实施例的调整后的需要组合编排的场景2示意图。
具体实施方式
为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。
本发明的该基于微服务架构实现Restful服务图形化服务编排的系统,其中包括:
服务编排定义模块,用于定义服务编排规格、调用图元,以及不同图元之间的流转规则;
服务编排加载引擎模块,与所述的服务编排定义模块相连接,用于实时编译文件以及转换文件;
服务编排执行引擎模块,与所述的服务编排加载引擎模块相连接,用于调用同系统不同微服务或跨系统间的Restful服务;
服务编排热更新模块,与所述的服务编排执行引擎模块相连接,用于动态监听服务编排资源的变化,并通过自定义的类加载器加载机制实现服务编排的热更新。
作为本发明的优选实施方式,所述的服务编排定义模块包括:
服务编排规格单元,用于定义服务编排变量、服务编排参数和服务编排返回值;
服务图元单元,与所述的服务编排规格单元相连接,用于定义服务编排支持的图元;
连线规则单元,与所述的服务图元单元相连接,用于定义服务编排连线规则;
调用规格单元,与所述的连线规则单元相连接,用于定义具体服务图元的调用规格;
服务编排动作单元,与所述的调用规格单元相连接,用于根据定义的服务编排规范,完成具体的服务编排动作;
生成文件单元,与所述的服务编排动作单元相连接,用于生成并保存完成的服务编排文件。
作为本发明的优选实施方式,所述的服务编排支持的图元包括开始图元、结束图元、赋值图元、循环图元、子服务编排图元、本地处理图元、SpringBean调用图元、Restful调用图元和注释图元。
作为本发明的优选实施方式,所述的服务编排连线规则包括连接线、退出线和异常线。
本发明的该利用上述系统实现基于微服务架构的Restful服务图形化服务编排处理方法,其中包括以下步骤:
(1)所述的服务编排定义模块定义服务编排规格、调用图元,以及不同图元之间的流转规则,并生成XML文件;
(2)所述的服务编排加载引擎模块将服务编排定义模块生成的XML文件转换为Java文件,实时编译成Java类文件;
(2.1)解析服务编排XML文件,加载为Java模型对象;
(2.2)生成服务编排的Java文件;
(2.3)生成用于调试的SMAP文件,并生成Java源代码的行号信息;
(2.4)将Java文件编译为Java类文件,并将SMAP文件合并到Java类文件中;
(2.5)定义自定义类加载器,将服务编排的Java类文件加载到JVM堆栈中;
(3)所述的服务编排执行引擎模块直接调用同系统内不同微服务间的Restful服务,或通过网关调用跨系统的Restful服务;
(4)所述的服务编排热更新模块动态监听服务编排资源的变化,通过自定义实现的类加载器加载机制实现服务编排的热更新;
(4.1)改变监听服务编排文件资源;
(4.2)判断服务编排文件资源的时间戳是否发生变化,如果是,则继续步骤(4.3);
否则,放弃本次事件;
(4.3)设置当前服务编排的服务调用状态为停用;
(4.4)判断变化的服务编排资源状态是新增、修改还是删除,如果是新增或修改,则继续步骤(4.5);否则,放弃本次事件;
(4.5)加载变化的服务编排资源文件,记录新的服务编排的时间戳;
(4.6)设置当前服务编排的服务调用状态为可用,允许接收外部请求;
(4.7)接收外部服务的调用,使当前的服务编排可用。
本发明的具体实施方式中,本发明分为服务编排定义模块、服务编排加载引擎模块、服务编排执行引擎模块、服务编排热更新模块。服务编排定义模块,定义服务编排规格、调用图元,以及不同图元之间的流转规则,并生成XML文件;服务编排加载引擎模块,在微服务应用启动时负责将服务编排定义模块生成的XML文件转换为Java文件,实时编译成Java类文件,实现服务编排的高效运行;服务编排执行引擎模块,提供对同系统内不同微服务间的Restful服务直接调用,或者对跨系统的Restful服务通过网关实现调用;服务编排热更新模块,动态监听服务编排资源的变化,通过自定义实现的Classloader加载机制实现服务编排的热更新。本发明中的Classloader为类加载器,本发明的示意图如图1所示。
下面将详细描述服务编排定义模块、服务编排加载引擎模块、服务编排执行引擎模块、服务编排热更新模块。
一、服务编排定义模块:
本模块主要分为六部分,第一部分是定义服务编排规格;第二部分是定义支持的服务图元;第三部分是定义服务编排的连线规则;第四部分定义具体服务图元的调用规格;第五部分是执行服务编排动作,第六部分是生成服务编排文件,将第五部分生成的服务编排保存到XML文件。
1、定义服务编排规格:
服务编排规格声明服务编排变量、服务编排参数、服务编排返回值。
服务编排变量是服务编排中定义的临时变量,在服务编排中,其作用域仅限于当前服务编排。变量数据会放在服务编排上下文中,当服务编排执行完毕,变量的生命周期也随之结束。服务编排的过程中,可以使用变量进行赋值、判断和其它相关的操作。
服务编排参数是服务编排的输入参数,类似Java方法中的参数,外部调用服务编排时需要传入相应的参数,该参数按照引用的方式传入。服务编排的参数可以在整个服务编排内部使用,服务编排内部不同的图元均可以使用服务编排本身定义的参数。
服务编排返回值是服务编排执行结果的返回值,类似Java方法中的返回值,服务编排支持1个或多个返回值。
服务编排的整体规格采用XML Schema来描述,用于定义支持的服务图元规格、服务编排的连线规则规格、具体服务图元的规格。
2、定义支持的服务图元:
服务编排支持的图元包括:开始图元、结束图元、赋值图元、循环图元、子服务编排图元、本地处理图元、SpringBean调用图元、Restful调用图元、注释图元等。
开始图元,表示服务编排开始;
结束图元,表示服务编排结束;
赋值图元,提供了对变量赋值的功能;
循环图元,提供了遍历集合和按条件循环的功能;
本地处理图元,提供了调用本地处理的功能;
SpringBean调用图元,提供了调用Spring Bean的功能;
Restful调用图元,提供了调用远程Restful服务的功能;
子服务编排图元,提供了调用其它服务编排的功能;
注释图元,提供了对服务编排的描述;
服务图元的具体描述如下表所示:
3、定义服务编排的连线规则:
服务编排连线规则包括:连接线、退出线、异常线等。
连接线:用于服务编排图元间执行情况的跳转;
退出线:用于服务编排的循环图元中,用于退出当前的循环;
异常线:当服务编排中的图元在执行过程中发生异常时,可以用异常线将流程转到指定的图元上;
服务编排连线的具体描述如下表所示:
4、定义具体服务图元的调用规格
本部分重点描述Restful调用图元的规格声明,Restful调用图元包括远程服务URL、HTTP Method类型、参数列表、返回值、调用类型同步异步、返回值是否封装为ResponseEntity等。
5、执行服务编排动作
根据上面4部分定义的服务编排规范,通过拖拽的方式定义服务编排规格、编排图元、编排连线、编排具体图元的规格,完成具体的服务编排动作。
6、生成服务编排文件
将上面第5部中编排好的服务编排文件保存,生成符合服务编排XML Schema的XML文件。
二、服务编排加载引擎模块:
服务编排加载引擎模块将服务编排定义模块中生成的服务编排文件进行解析、构建、编译、加载到JVM堆栈中,最终生成Java文件、Java类文件、用于调试的SMAP(服务编排文件名和行号与JAVA行号之间的对应表)文件。服务编排加载引擎模块操作的步骤如图2所示。
步骤说明:
步骤1:解析服务编排XML文件,加载为Java模型对象;
步骤2:根据步骤1中的Java模型对象,生成服务编排的Java文件,一个服务编排生成为一个Java文件;
步骤2.1:生成服务编排主入口Java方法;
步骤2.2:为每个服务编排的图元生成一个Java方法;
步骤2.3:为每个服务编排的连线生成一个Java方法;
步骤3:根据步骤2中生成的Java文件,生成用于调试的SMAP文件,为每个方法的入口在SMAP中生成对应的Java源代码的行号信息;
步骤4:根据步骤2生成的Java文件与步骤3中生成的SMAP文件,将步骤2生成的服务编排的Java文件编译为Java类文件,并将SMAP文件合并到Java类文件中,支持对图形化服务编排的调试功能;
步骤5:定义自定义ClassLoader,支持重新加载Java类文件能力;
步骤6:通过步骤5定义的ClassLoader,将步骤4生成的服务编排的Java类文件加载到JVM堆栈中;
三、服务编排执行引擎模块:
服务编排执行引擎模块,通过Restful服务调用图元实现对Restful服务的调用,技术层面采用Spring的RestTemplate或者SpringCloud的Feign客户端来实现,其中远程服务的URL参数常见的格式为:
http://SERVICE-PROVIDER:8080/api/user/getName/{id}
SERVICE-PROVIDER为服务提供者在服务注册中心的名字,可以是具体微服务应用名称,或者网关的名称;当SERVICE-PROVIDER是微服务应用名称时,实现对同系统内不同微服务间的Restful服务直接调用;当SERVICE-PROVIDER是网关名称时,实现对跨系统的Restful服务通过网关实现调用。
四、服务编排热更新模块:
服务编排热更新模块,动态监听服务编排资源的变化,对比已加载与新变化的服务编排资源文件的时间戳,如果变化的时间戳新,则重新加载当前服务编排资源,通过自定义的Classloader加载机制实现服务编排的热更新;在重新加载服务编排资源文件时,会将当前服务编排设置为停用状态,重新加载完毕后,再将当前服务编排设置为可用状态。服务编排热更新模块操作的步骤如图3所示。
步骤说明:
步骤1:监听服务编排文件资源发生改变;
步骤2:判断服务编排文件资源的时间戳是否发生变化;
步骤2.1:服务编排文件资源的时间戳发生变化,则执行步骤3;
步骤2.2:服务编排文件资源的时间戳未发生变化,则放弃本次事件;
步骤3:设置当前服务编排的服务调用状态为停用,不再接受外部请求;
步骤4:判断变化的服务编排资源状态是新增、修改还是删除;
步骤4.1:变化的服务编排资源状态是新增或者修改,则执行步骤5;
步骤4.2:变化的服务编排资源状态是删除,则放弃本次事件;
步骤5:加载变化的服务编排资源文件;
步骤6:记录新的服务编排的时间戳;
步骤7:设置当前服务编排的服务调用状态为可用,允许接收外部请求;
步骤8:接收外部服务的调用,使的当前的服务编排可用。
本部分以一个产品订单系统,提供用户在线订购产品作为具体实施例来说明本发明的实现方式。
产品订单系统中包括三个微服务应用:产品管理应用、产品库存应用、订单管理应用。
产品管理应用提供的Restful服务包括:
1)产品列表查询接口;
2)产品详情接口;
3)产品库存设置(更新)接口,调用产品库存应用;
产品库存应用提供的Restful服务包括:
1)产品库存设置(更新)接口;
2)产品库存查询接口;
订单管理应用提供的Restful服务包括:
1)我的订单列表查询接口;
2)产品加入购物车接口;
3)根据指定条件查询用户订单列表接口;
4)下单接口:下单后从购物车中清除对应的产品信息,购物车中未下单的产品信息仍旧保留;
假设场景如下:
场景1:需要在订单管理应用中增加一个新的业务功能,提供查询某产品的详情和库存数量的能力,需要组合编排产品详情接口(产品管理应用)与产品库存查询接口(产品库存应用)。需要组合编排的场景1如图4所示。
场景2:上述服务编排发布后,因业务需要,需要增加根据产品ID查询订单列表的需求,在服务编排中增加“Restful调用图元3”。调整后的需要组合编排的场景2如图5所示
之后,根据本发明的方法,采用Restful服务图形化服务编排的方式来实现上面定义的场景,将会明显感受到本发明所具有的简单便利的优势。
一、服务编排定义模块:
根据上面场景1需要新建的服务编排,在本部分定义服务编排Query_Product_Stock,下面将分为六部分来描述该服务编排定义。
1、定义服务编排规格
针对服务编排Query_Product_Stock,定义服务编排变量、服务编排参数、服务编排返回值。服务编排Query_Product_Stock接受外部传入一个参数productid(需要查询的产品ID)与一个返回值product(返回产品对象Product类型)。
具体服务编排规格定义参见下表:
2、定义支持的服务图元
服务编排支持的图元包括开始图元、结束图元、赋值图元、循环图元、子服务编排图元、本地处理图元、SpringBean调用图元、Restful调用图元、注释图元等。
服务编排Query_Product_Stock定义四个图元,分别是开始图元、Restful调用图元1、Restful调用图元2、结束图元。其中“Restful调用图元1”调用产品详情接口(产品管理应用),“Restful调用图元2”调用产品库存查询接口(产品库存应用)。
3、定义服务编排的连线规则
服务编排连线规则包括:连接线、退出线、异常线等。在服务编排Query_Product_Stock中主要包括3条连接线,分别是连接线1、连接线2、连接线3,具体参见下表:
名称 | 前驱图元 | 后驱图元 | 说明 |
连接线1 | 开始图元 | Restful调用图元1 | 默认连线 |
连接线2 | Restful调用图元1 | Restful调用图元2 | 默认连线 |
连接线3 | Restful调用图元2 | 结束图元 | 默认连线 |
4.定义具体服务图元的调用规格
本部分重点描述服务编排Query_Product_Stock中两个Restful调用图元,Restful调用图元1与Restful调用图元2的调用规则,只需要简单的配置两个Restful服务图元的基本信息,即可以完成对Restful服务的编排。
Restful调用图元1负责完成查询产品详情接口(产品管理应用),返回产品详细信息;Restful调用图元2负责完成产品库存查询接口(产品库存应用),返回产品的库存数量。
Restful调用图元1的规格配置参见下表:
Restful调用图元2的规格配置参见下表:
5、执行服务编排动作:
根据上面4部分定义的服务编排规范,通过图形化与拖拽的方式完成服务编排Query_Product_Stock的所有规格的定义。
6、生成服务编排文件:
将上面第5步中编排好的服务编排Query_Product_Stock保存成文件:Query_Product_Stock.bizx,文件符合服务编排定义的XML Schema规范。
二、服务编排加载引擎模块:
服务编排加载引擎模块将服务编排定义模块中生成的服务编排文件Query_Product_Stock.bizx进行解析、构建、编译、加载到JVM堆栈中,最终生成Query_Product_Stock_biz.java、Query_Product_Stock_biz.class、Query_Product_Stock_biz.smap三个文件。本模块的具体实现如下:
1、解析服务编排文件Query_Product_Stock.bizx,通过EMF(EclipseModelingFramework,是Eclipse提供的一套建模框架,可以用EMF建立XML与Java对象之间的映射关系)技术将服务编排文件Query_Product_Stock.bizx解析为Java模型对象TServiceWeaveModel;
2、基于上面生成的TServiceWeaveModel对象,生成Query_Product_Stock_biz.java文件,执行下面的方法:
public String buildJavaFile(TServiceWeaveModel serviceWeaveModel,StringqName)throws Exception;
参数serviceWeaveModel为第一步中生成的TServiceWeaveModel类型的对象,参数qName为生成的Java文件全名;分别生成主入口方法invoke(),Restful服务图元对应的方法invokeRest1()、invokeRest2()。生成服务编排对应的Query_Product_Stock_biz.java文件部分代码参见下表:
3、根据步骤2中生成的Query_Product_Stock_biz.java文件,抽取所有的注释信息(注释信息里面描述了图元对应的代码的方法和对应的行号)到Query_Product_Stock_biz.smap,执行下面的方法:
public String buildSMAPFile(String javaFilePath,String qName)throwsException;
参数javaFilePath是生成Java文件的路径,参数qName是生成的SMAP文件全名。生成的Query_Product_Stock_biz.smap文件示例如下所示:
SMAP
Query_Product_Stock_biz.java
biz
*S biz
*F
+0Query_Product_Stock_biz.bizx
com/primeton/bizlogic/Query_Product_Stock_biz.bizx
*L
1:55,2
10000:58,3
40000:62,3
430000:66,3
450000:70,3
2:85
*E
4、通过JDT(Java Development Tools,是Eclipse里的一个Jar组件)提供的JDTCompiler类中的compile方法,将步骤2生成的Query_Product_Stock_biz.java文件编译为Query_Product_Stock_biz.class,随后通过执行静态方法mergeSMap将步骤3中生成的Query_Product_Stock_biz.smap文件合并到Query_Product_Stock_biz.class中,提供图形化调试能力。执行的代码片段参见下表:
//将SMAP字节流合并到类文件中
public static void mergeSMap(String classFilePath,byte[]smap)throwsIOException;
5、定义自定义的DirClassLoader,提供加载指定目录下的所有class文件,支持重新加载Query_Product_Stock_biz.class文件,提供对服务编排热更新的能力,自定义的DirClassLoader参见下表:
6、通过步骤5定义的DirClassLoader,将服务编排文件Query_Product_Stock_biz.class加载到JVM堆栈中,对外提供服务;
三、服务编排执行引擎模块:
服务编排执行引擎模块,通过Restful服务调用图元实现对Restful服务的调用,技术层面采用Spring的RestTemplate或者SpringCloud的Feign客户端来实现。下面的实现采用Spring的RestTemplate作为例子来实现Restful服务调用图元实际生成的执行引擎代码。服务编排Query_Product_Stock中Restful调用图元1生成的执行代码参见下面示例:
其中“SERVICE-PRODUCT”是产品管理应用在注册中心的名称,实现对同系统内不同微服务间的Restful服务直接调用。
四、服务编排热更新模块:
根据上面需求场景,需要调整服务编排Query_Product_Stock,增加一个Restful图元调用3(根据产品ID查询订单列表)。本模块监听服务编排Query_Product_Stock的变化,重新加载服务编排Query_Product_Stock,实现对服务编排Query_Product_Stock的热更新与不停机发布。本模块的具体实现如下:
1、监听服务编排文件Query_Product_Stock.bizx发生了变化;
2、判断服务编排文件资源的时间戳(原时间戳为:20191023080808100,更新后的时间戳为20191024052608108)发生了变化,则执行步骤3;
3、设置服务编排Query_Product_Stock的服务调用状态为停用状态,不再接受外部请求,实现服务优雅的更新;
4、判断服务编排Query_Product_Stock的资源更新状态为修改;
5、使用“服务编排加载引擎模块”重新加载修改后的服务编排文件Query_Product_Stock.bizx,并使用自定义的DirClassLoader重新加载Query_Product_Stock.class文件到JVM堆栈中;
6、记录服务编排Query_Product_Stock更新后的时间戳为:20191024052608108,以便下次资源变更时进行对比操作;
7、重新设置服务编排Query_Product_Stock的服务调用状态为可用状态,允许接受外部请求调用;
8、接收外部服务的调用,服务编排Query_Product_Stock继续对外提供服务;
按照以上实施步骤,根据业务需求便捷的完成了Restful服务图形化的服务编排需求,开发人员只需要简单的组装Restful调用图元,并设置对应图元、连线规格即可。从而实现了Restful服务的图形化服务编排、高效运行模式、热加载能力,使得服务编排过程更加直观、简单高效;同时减少了开发人员对复杂的代码编写,降低服务编排出错的可能;另外还支持服务编排的不停机的发布,及时快速响应业务变化。
采用了本发明的基于微服务架构实现Restful服务图形化服务编排的系统及其方法,实现了Restful服务的图形化服务编排、高效运行模式、热加载能力,从而实现了服务编排过程更加直观、简单高效;同时减少了开发人员对复杂的代码编写,降低服务编排出错的可能;另外还支持服务编排的不停机的发布,及时快速响应业务变化。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
Claims (7)
1.一种基于微服务架构实现Restful服务图形化服务编排的系统,其特征在于,所述的系统包括:
服务编排定义模块,用于定义服务编排规格、调用图元,以及不同图元之间的流转规则;
服务编排加载引擎模块,与所述的服务编排定义模块相连接,用于实时编译文件以及转换文件;
服务编排执行引擎模块,与所述的服务编排加载引擎模块相连接,用于调用同系统不同微服务或跨系统间的Restful服务;
服务编排热更新模块,与所述的服务编排执行引擎模块相连接,用于动态监听服务编排资源的变化,并通过自定义的类加载器加载机制实现服务编排的热更新。
2.根据权利要求1所述的基于微服务架构实现Restful服务图形化服务编排的系统,其特征在于,所述的服务编排定义模块包括:
服务编排规格单元,用于定义服务编排变量、服务编排参数和服务编排返回值;
服务图元单元,与所述的服务编排规格单元相连接,用于定义服务编排支持的图元;
连线规则单元,与所述的服务图元单元相连接,用于定义服务编排连线规则;
调用规格单元,与所述的连线规则单元相连接,用于定义具体服务图元的调用规格;
服务编排动作单元,与所述的调用规格单元相连接,用于根据定义的服务编排规范,完成具体的服务编排动作;
生成文件单元,与所述的服务编排动作单元相连接,用于生成并保存完成的服务编排文件。
3.根据权利要求2所述的基于微服务架构实现Restful服务图形化服务编排的系统,其特征在于,所述的服务编排支持的图元包括开始图元、结束图元、赋值图元、循环图元、子服务编排图元、本地处理图元、SpringBean调用图元、Restful调用图元和注释图元。
4.根据权利要求2所述的基于微服务架构实现Restful服务图形化服务编排的系统,其特征在于,所述的服务编排连线规则包括连接线、退出线和异常线。
5.一种利用权利要求1所述的系统实现基于微服务架构的Restful服务图形化服务编排处理方法,其特征在于,所述的方法包括以下步骤:
(1)所述的服务编排定义模块定义服务编排规格、调用图元,以及不同图元之间的流转规则,并生成XML文件;
(2)所述的服务编排加载引擎模块将服务编排定义模块生成的XML文件转换为Java文件,实时编译成Java类文件;
(3)所述的服务编排执行引擎模块直接调用同系统内不同微服务间的Restful服务,或通过网关调用跨系统的Restful服务;
(4)所述的服务编排热更新模块动态监听服务编排资源的变化,通过自定义实现的类加载器加载机制实现服务编排的热更新。
6.根据权利要求5所述的实现基于微服务架构的Restful服务图形化服务编排处理方法,其特征在于,所述的步骤(2)具体包括以下步骤:
(2.1)解析服务编排XML文件,加载为Java模型对象;
(2.2)生成服务编排的Java文件;
(2.3)生成用于调试的SMAP文件,并生成Java源代码的行号信息;
(2.4)将Java文件编译为Java类文件,并将SMAP文件合并到Java类文件中;
(2.5)定义自定义类加载器,将服务编排的Java类文件加载到JVM堆栈中。
7.根据权利要求5所述的实现基于微服务架构的Restful服务图形化服务编排处理方法,其特征在于,所述的步骤(4)具体包括以下步骤:
(4.1)改变监听服务编排文件资源;
(4.2)判断服务编排文件资源的时间戳是否发生变化,如果是,则继续步骤(4.3);否则,放弃本次事件;
(4.3)设置当前服务编排的服务调用状态为停用;
(4.4)判断变化的服务编排资源状态是新增、修改还是删除,如果是新增或修改,则继续步骤(4.5);否则,放弃本次事件;
(4.5)加载变化的服务编排资源文件,记录新的服务编排的时间戳;
(4.6)设置当前服务编排的服务调用状态为可用,允许接收外部请求;
(4.7)接收外部服务的调用,使当前的服务编排可用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911085696.1A CN110764752B (zh) | 2019-11-08 | 2019-11-08 | 实现Restful服务图形化服务编排的系统及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911085696.1A CN110764752B (zh) | 2019-11-08 | 2019-11-08 | 实现Restful服务图形化服务编排的系统及其方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110764752A CN110764752A (zh) | 2020-02-07 |
CN110764752B true CN110764752B (zh) | 2023-06-16 |
Family
ID=69336948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911085696.1A Active CN110764752B (zh) | 2019-11-08 | 2019-11-08 | 实现Restful服务图形化服务编排的系统及其方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110764752B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111949257A (zh) * | 2020-07-07 | 2020-11-17 | 北京思特奇信息技术股份有限公司 | 可拖曳的服务编排方法、系统和使用方法 |
CN112463141B (zh) * | 2020-11-25 | 2021-12-14 | 北京航空航天大学 | 一种基于bpmn的微服务工作流部署方法 |
CN113220481A (zh) * | 2021-04-30 | 2021-08-06 | 平安壹钱包电子商务有限公司 | 请求处理及反馈方法、装置、计算机设备及可读存储介质 |
CN113805870B (zh) * | 2021-09-18 | 2024-01-30 | 上海熙菱信息技术有限公司 | 一种基于bff架构的服务接口编排方法和系统 |
CN114153444A (zh) * | 2021-12-09 | 2022-03-08 | 中国建设银行股份有限公司 | 一种构建组合服务的方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106254423A (zh) * | 2016-07-20 | 2016-12-21 | 普元信息技术股份有限公司 | 基于微服务架构实现Restful服务快速发布的方法 |
CN107888681A (zh) * | 2017-11-09 | 2018-04-06 | 北京中电普华信息技术有限公司 | 一种业务流程处理方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10230571B2 (en) * | 2014-10-30 | 2019-03-12 | Equinix, Inc. | Microservice-based application development framework |
US20170187785A1 (en) * | 2015-12-23 | 2017-06-29 | Hewlett Packard Enterprise Development Lp | Microservice with decoupled user interface |
-
2019
- 2019-11-08 CN CN201911085696.1A patent/CN110764752B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106254423A (zh) * | 2016-07-20 | 2016-12-21 | 普元信息技术股份有限公司 | 基于微服务架构实现Restful服务快速发布的方法 |
CN107888681A (zh) * | 2017-11-09 | 2018-04-06 | 北京中电普华信息技术有限公司 | 一种业务流程处理方法及装置 |
Non-Patent Citations (1)
Title |
---|
张晶 ; 黄小锋 ; .一种基于微服务的应用框架.计算机系统应用.2016,(09),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN110764752A (zh) | 2020-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110764752B (zh) | 实现Restful服务图形化服务编排的系统及其方法 | |
Shyamsundar et al. | Collaborative virtual prototyping of product assemblies over the Internet | |
CN106254423B (zh) | 基于微服务架构实现Restful服务快速发布的方法 | |
US7080092B2 (en) | Application view component for system integration | |
KR101011744B1 (ko) | 플랫폼 중립 일반 서비스의 클라이언트 애플리케이션 구축시스템 및 방법 | |
CA2446809C (en) | General and reusable components for defining net-centric application program architectures | |
JP3090435U (ja) | 企業間プロセスを作成し、実行し、保守するためのシステム | |
US7941546B2 (en) | Cross-domain communication technique for execution of web mashups | |
JP5046161B2 (ja) | ネットワーク・エッジ・コンピューティング向けのアプリケーション分割 | |
US20080155525A1 (en) | Synchronization patterns for mobile applications | |
US20060271911A1 (en) | Generating executable objects implementing methods for an information model | |
US20100281463A1 (en) | XML based scripting framework, and methods of providing automated interactions with remote systems | |
JP2004500619A (ja) | サービスを作成するための方法および装置 | |
JP2006526209A (ja) | コンポーネント基盤環境下で拡張されたメタデータを利用したソフトウェア開発方法及びその開発システム | |
JP2005505055A (ja) | モバイルウェブクライアントに対する方法、装置及びシステム | |
KR20050119645A (ko) | 그래픽 사용자 인터페이스 제어를 이용하여 웹 서비스들을조합함에 의한 프로그램의 생성 | |
CN101847100A (zh) | 扩展软件应用的方法和装置 | |
JP2009238231A (ja) | コンポーネント基盤環境下で拡張されたメタデータを利用したソフトウェア開発方法及びその開発システム | |
JP2005506618A (ja) | システム統合のためのアプリケーションビューコンポーネント | |
CN102375743B (zh) | 一种基于模型和模板开发soa系统的方法 | |
CN114254606A (zh) | 微服务框架模型 | |
CN109005163B (zh) | 一种http动态请求服务调用方法 | |
CN112418796B (zh) | 子流程任务节点激活方法、装置、电子设备及存储介质 | |
JP2009530707A (ja) | コマンドラインのパイプライン化 | |
Markkula et al. | A generic architectural model approach for efficient utilization of patterns: application in the mobile domain |
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 |