CN110580155B - 状态机引擎的实现方法、装置、计算机设备及存储介质 - Google Patents
状态机引擎的实现方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN110580155B CN110580155B CN201910702763.3A CN201910702763A CN110580155B CN 110580155 B CN110580155 B CN 110580155B CN 201910702763 A CN201910702763 A CN 201910702763A CN 110580155 B CN110580155 B CN 110580155B
- Authority
- CN
- China
- Prior art keywords
- state machine
- state
- engine
- machine engine
- configuration 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/31—Programming languages or programming paradigms
-
- 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
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
- G06F9/4451—User profiles; Roaming
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种状态机引擎的实现方法、装置、计算机设备及存储介质,属于状态机技术领域。方法包括:状态机引擎接收业务系统针对目标业务发送的状态机实例创建请求;状态机引擎根据状态机实例创建请求,加载目标业务对应的规则配置文件;状态机引擎将规则配置文件解析为状态迁移表,并初始化引擎上下文,将生成的状态机实例返回给业务系统;状态机引擎利用表达式引擎结合引擎上下文对状态迁移表中的条件表达式进行预编译,并缓存编译结果。本发明实施例能够实现业务流程与状态的解耦分离,能够简化实体状态迁移的复杂性,且能够兼容于已有系统框架,具备较好的通用性。
Description
技术领域
本发明涉及状态机技术领域,尤其涉及一种状态机引擎的实现方法、装置、计算机设备及存储介质。
背景技术
有限状态机(FSM)是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。在电商场景(订单、物流、支付)、社交(IM消息投递)、分布式集群管理(分布式计算平台任务编排)等场景都有大规模的使用。
有限状态机是一个特殊的有向图,包括一些状态(节点)和连接这些状态的有向弧。每个有限状态机都有一个开始状态和终止状态,以及若干中间状态,每一条弧上带有从一个状态进入下一个状态的条件。
在业务系统的生命周期之中,某些单据状态值不可避免地会发生改变,这就需要及时对代码中涉及状态的操作进行修改,简单状态的变化通常可以使用状态硬编码的方式实现;但随着业务的发展,系统中的状态越来越多且迁移规则复杂,每次状态值的变动都需要改动业务中使用到状态的相关代码,更糟糕的是这些代码可能遍布于整个系统的各个角落,不仅增加发布的风险也同时增加了测试的回归任务。基于以上一些需求,诞生了多种多样的状态机引擎:
例如:Spring State Machine,必须依赖Spring框架,最新版本依赖Spring框架5.x,而企业的项目工程中版本若为4.x,则无法及时更新至最新版本进而升级状态机,而且学习成本也较高;
又例如:Squirrel-foundation,框架约束性很强、状态机行为模式固化,状态机本身遵循了约定大于配置的原则,例如:
定义方法transitFrom[SourceStateName]To[TargetStateName]On[EventName]在实际开发中存在诸多不便和限制。
发明人在对现有技术的研究过程中发现,虽然已有开源框架状态机引擎可以有效减少开发、维护代码量,保证状态扭转的效率,但这些引擎普遍存在学习曲线陡峭、性能优化困难、难以和已有系统完美融合的弊端。
发明内容
为了解决上述背景技术中提到的至少一个问题,本发明实施例提供了一种状态机引擎的实现方法、装置、计算机设备和存储介质,实现业务流程与状态的解耦分离,能够简化实体状态迁移的复杂性,且能够兼容于已有系统框架,具备较好的通用性。
本发明实施例提供的具体技术方案如下:
第一方面,提供了一种状态机引擎的实现方法,所述方法包括:
状态机引擎接收业务系统针对目标业务发送的状态机实例创建请求;
所述状态机引擎根据所述状态机实例创建请求,加载所述目标业务对应的规则配置文件;
所述状态机引擎将所述规则配置文件解析为状态迁移表,并初始化引擎上下文,生成状态机实例返回至所述业务系统;
所述状态机引擎利用表达式引擎结合所述引擎上下文对所述状态迁移表中的条件表达式进行预编译,并缓存编译结果。
进一步地,所述状态机引擎根据所述状态机实例创建请求,加载所述目标业务对应的规则配置文件,包括:
所述状态机引擎根据业务与规则配置文件的存储路径之间的对应关系,自动加载所述目标业务对应的规则配置文件;
其中,所述对应关系被预先写入所述状态机引擎中,或者所述对应关系被预先写入供所述状态机引擎读取的预设文件中。
进一步地,所述规则配置文件为JSON格式文件,所述状态机引擎将所述规则配置文件解析为状态迁移表,包括:
所述状态机引擎使用JSON反序列化工具将所述规则配置文件解析为JSON数组结构的状态迁移表。
进一步地,所述状态机引擎使用JSON反序列化工具将所述规则配置文件解析为JSON数组结构的状态迁移表,包括:
所述状态机引擎使用JSON反序列化工具将所述规则配置文件中的状态迁移规则定义语句解析为JSON数组结构的状态迁移表。
进一步地,所述缓存编译结果步骤之后,所述方法还包括:
响应于所述业务系统通过所述状态机实例提供的API接口提交的状态迁移请求,所述状态机引擎加载所述业务系统输入的上下文数据,并利用所述表达式引擎对所述上下文数据通过缓存的所述编译结果进行计算;
所述状态机引擎判断所述计算的结果是否满足所述状态迁移表中的迁移条件,若满足,则进行状态迁移,并将状态迁移结果通过所述API接口返回给所述业务系统。
进一步地,所述方法还包括:
响应于所述业务系统通过所述状态机实例提供的API接口输入的指定状态,所述状态机引擎计算所述指定状态下一步可执行的操作集合,并返回给所述业务系统;和/或
响应于所述业务系统通过所述状态机实例提供的API接口输入的指定角色,所述状态机引擎计算所述指定角色下一步可执行的操作事件名称集合,并返回给所述业务系统。
第二方面,提供了一种状态机引擎装置,所述装置包括:
请求接收模块,用于接收业务系统针对目标业务发送的状态机实例创建请求;
规则加载模块,用于根据所述状态机实例创建请求,加载所述目标业务对应的规则配置文件;
实例生成模块,用于将所述规则配置文件解析为状态迁移表,并初始化引擎上下文,生成状态机实例;
实例返回模块,用于将生成的所述状态机实例返回至所述业务系统;
预编译模块,用于利用表达式引擎结合所述引擎上下文对所述状态迁移表中的条件表达式进行预编译,并缓存编译结果。
进一步地,所述规则加载模块具体用于:
根据业务与规则配置文件的存储路径之间的对应关系,自动加载所述目标业务对应的规则配置文件;
其中,所述对应关系被预先写入所述状态机引擎中,或者所述对应关系被预先写入供所述状态机引擎读取的预设文件中。
进一步地,所述规则配置文件为JSON格式文件,所述实例生成模块具体用于:
使用JSON反序列化工具将所述规则配置文件解析为JSON数组结构的状态迁移表。
进一步地,所述实例生成模块具体用于:
使用JSON反序列化工具将所述规则配置文件中的状态迁移规则定义语句解析为JSON数组结构的状态迁移表。
进一步地,所述装置还包括:
上下文加载模块,用于响应于所述业务系统通过所述状态机实例提供的API接口提交的状态迁移请求,加载所述业务系统输入的上下文数据;
表达式计算模块,用于利用所述表达式引擎对所述上下文数据通过缓存的所述编译结果进行计算;
迁移判断模块,用于判断所述计算的结果是否满足所述状态迁移表中的迁移条件,若满足,则进行状态迁移;
结果返回模块,用于将状态迁移结果通过所述API接口返回给所述业务系统。
进一步地,所述装置还包括:
第一计算模块,用于响应于所述业务系统通过所述状态机实例提供的API接口输入的指定状态,所述状态机引擎计算所述指定状态下一步可执行的操作集合,并返回给所述业务系统;和/或
第二计算模块,响应于所述业务系统通过所述状态机实例提供的API接口输入的指定角色,所述状态机引擎计算所述指定角色下一步可执行的操作事件名称集合,并返回给所述业务系统。
第三方面,提供了一种计算机设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面任意一种所述的状态机引擎的实现方法的步骤。
第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第一方面任意一种所述的状态机引擎的实现方法的步骤。
本发明提供一种状态机引擎的实现方法、装置、计算机设备及存储介质,通过状态机引擎接收业务系统针对目标业务发送的状态机实例创建请求,根据状态机实例创建请求,加载目标业务对应的规则配置文件,然后状态机引擎将规则配置文件解析为状态迁移表,并初始化引擎上下文,生成状态机实例,由于状态机实例是由状态机引擎基于业务系统的目标业务对应的规则配置文件生成的,由此能够通过灵活配置各种实体状态迁移规则以实现不同业务的状态机,即支持按照业务场景创建不同状态机实例,达到了只需要少量代码即可实现状态机的实例化而不涉及到框架层面的目的,不但具有较好的通用性,而且能够兼容于现有框架;另外,通过状态机引擎利用表达式引擎结合引擎上下文对状态迁移表中的条件表达式进行预编译,并缓存编译结果,如此可以便于在业务系统后续通过状态机实例的接口调用状态机引擎进行状态迁移的过程中,能够直接从缓存中调用条件表达式的编译结果进行状态迁移计算,由此使得程序运行效率更高,且能够简化状态迁移的复杂性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种状态机引擎的实现方法的流程图;
图2为本发明实施例提供的状态迁移流程示意图;
图3为本发明实施例提供的规则配置文件中的规则描述示意图。
图4为本发明实施例提供的状态机引擎的实现流程示意图;
图5为本发明实施例提供的状态机引擎装置的结构框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,在本发明的描述中,除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
还应当理解,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
本发明实施例提供的状态机引擎的实现方法,通过在业务系统请求针对目标业务请求创建状态机实例时,状态机引擎自动加载该目标业务对应的规则配置文件,并解析成状态迁移表,以及结合引擎上下文生成状态机实例返回给业务系统,实现了业务流程与状态的解耦分离,能够简化实体状态迁移的复杂性,且能够兼容于已有系统框架,可以应用于涉及较多单据操作的应用场景中,例如电商场景中的订单、支付、库存等业务,具有很好的通用性,而且相比已有开源状态机创建状态的实例更小、在状态机引擎的实现过程中更加灵活且能获得更高的性能。此外,本发明实施例中,状态机引擎可以与业务系统部署到同一服务器或不同的服务器上,该服务器可以是独立的服务器或者是多个服务器组成的服务集群来实现。
在一个实施例中,如图1所示,提供了一种状态机引擎的实现方法,该方法可以包括如下步骤:
101、状态机引擎接收业务系统针对目标业务发送的状态机实例创建请求。
其中,业务系统可以包括但不限于销售系统、物流系统、库存系统等。
本实施例中,状态机引擎是驱动状态机工作的一种规则,可以根据业务系统的不同业务需求创建不同的状态机实例。其中,状态机实例是状态机引擎实例化出的状态机,在具体实现中,可以通过Java代码实现状态机引擎,状态机引擎可以针对不同的业务创建不同的状态机实例。
102、状态机引擎根据状态机实例创建请求,加载目标业务对应的规则配置文件。
本实施例中,不同的规则配置文件对应不同的业务,每一规则配置文件中分别描述有对应业务的状态迁移规则。其中,可以预先对业务的状态迁移规则通过JSON格式进行分层描述生成规则配置文件,并将规则配置文件按预设存储路径保存在本地或远程服务器上。
示例性地,对于业务系统的正向销售业务,参照图2所示,其状态迁移流程为:从初始状态“开单”开始,在执行创建订单后,状态迁移到“待支付”,若执行支付成功,则状态迁移到“待发货”,若执行取消订单,则状态迁移到“已取消”,对于状态“待发货”,若确认收货,则状态迁移到“已完成”,相应地,对于该正向销售业务的状态迁移规则可以通过如图3所示的JSON格式进行层次结构描述,图3中所示的状态迁移规则中包含当前状态(fromState)、迁移事件(events)。每一个状态中存在子状态(subStates),迁移事件中包含事件名称(eventName)、触发角色(roleNames)、消息机制(messages)、次态(toState)、前置条件(preConditions)、条件表达式(expression)、回调机制(beforeCallbacks)等。
具体地,状态机引擎可以根据业务与规则配置文件的存储路径之间的对应关系,自动加载目标业务对应的规则配置文件,其中,对应关系被预先写入状态机引擎中,或者对应关系被预先写入供状态机引擎读取的预设文件中。
在具体实现中,状态机引擎通过解析状态机实例创建请求得到目标业务的信息(例如业务标识),根据业务与规则配置文件的存储路径之间的对应关系,确定对应于目标业务的规则配置文件的存储路径(本地或远程服务器),并使用字符缓存流(BufferedReader)的形式读取目标业务对应的规则配置文件。
103、状态机引擎将规则配置文件解析为状态迁移表,并初始化引擎上下文,生成状态机实例返回给业务系统。
具体地,状态机引擎对于JSON格式的规则配置文件,可以使用JSON反序列化工具将规则配置文件解析为JSON数组结构的状态迁移表,更为具体地是,状态机引擎可以使用JSON反序列化工具(例如,Jackson)将规则配置文件中的状态迁移规则定义语句解析为JSON数组结构的状态迁移表。
其中,状态机引擎为有限状态机引擎,在解析得到状态迁移表后,将状态迁移表在状态机实例生成后(即状态机启动后)被状态机引擎初始化为不可变内存数据存储与引擎内存中,用于描述状态与迁移事件之间的对应关系,以使得状态迁移表在状态机的生命周期过程中不可改变。
其中,状态迁移表中包含按照迁移事件顺序迁移的多个状态,迁移事件包含事件名称、触发角色、次态、迁移条件(也称为“前置条件”)、条件表达式、回调机制和消息机制。事件名称描述为当业务系统的一个事件被满足,将会触发一个动作或执行一次状态迁移。角色定义可以触发迁移的角色名称,可以定义为任意的角色。消息机制描述了状态机迁移中的消息通知机制。回调机制可以为触发点环绕式回调机制,即定义事件上的表达式回调,也可以为命令式回调机制。
其中,引擎上下文包括但不限于状态迁移表中的事件名称、触发角色、条件表达式中的变量等信息。
本实施例中,状态机引擎在解析得到状态迁移表,并初始化引擎上下文后,可以得到状态机实例(即具体的状态机),状态机实例可以通过面向对应的方式提供APIs,APIs即多个API接口,不同API接口用于调用状态机引擎执行不同的操作。其中,状态机实例可以使用单例模式进行创建,如此可以保证系统中相同的状态机只被实例化一次,能够提升软件性能。
状态机引擎在生成状态机实例后,状态机实例将会返回给业务系统,以便于业务系统后续通过状态机实例的接口调用状态机引擎进行状态迁移等操作。
104、状态机引擎利用表达式引擎结合引擎上下文对状态迁移表中的条件表达式进行预编译,并缓存编译结果。
其中,表达式引擎可以采用MVEL或者QLExpress,以采用表达式引擎MVEL作为本实施例的优选方案,其采用基于Java应用程序的表达式语言,执行模式分为解释执行和编译执行,本实施例应用MVEL的编译执行模式,结合引擎上下文对状态迁移表中的条件表达式进行预编译,得到编译结果并缓存,如此可以预先在缓存中产生一个完全规范化的表达式,使得后续需要在状态迁移计算时可以直接调用缓存的编译结果并代入实际的上下文数据进行计算,从而能够提高状态机引擎的执行效率。
本发明提供的状态机引擎的实现方法,通过状态机引擎接收业务系统针对目标业务发送的状态机实例创建请求,根据状态机实例创建请求,加载目标业务对应的规则配置文件,然后状态机引擎将规则配置文件解析为状态迁移表,并初始化引擎上下文,生成状态机实例,由于状态机实例是由状态机引擎基于业务系统的目标业务对应的规则配置文件生成的,由此能够通过灵活配置各种实体状态迁移规则以实现不同业务的状态机,即支持按照业务场景创建不同状态机实例,达到了只需要少量代码即可实现状态机的实例化而不涉及到框架层面的目的,不但具有较好的通用性,而且能够兼容于现有框架;另外,通过状态机引擎利用表达式引擎结合引擎上下文对状态迁移表中的条件表达式进行预编译,并缓存编译结果,如此可以便于在业务系统后续通过状态机实例的接口调用状态机引擎进行状态迁移的过程中,能够直接从缓存中调用条件表达式的编译结果进行状态迁移计算,由此使得程序运行效率更高,且能够简化状态迁移的复杂性。
在一个实施例中,上述的缓存编译结果步骤之后,方法还包括:
响应于业务系统通过状态机实例提供的API接口提交的状态迁移请求,状态机引擎加载业务系统输入的上下文数据,并利用表达式引擎对上下文数据通过缓存的编译结果进行计算;
状态机引擎判断计算的结果是否满足状态迁移表中的迁移条件,若满足,则进行状态迁移,并将状态迁移结果通过API接口返回给业务系统。
其中,状态机引擎将状态迁移结果以对象的形式返回给业务系统,状态迁移结果中可以包含事件名称、迁移前的旧状态、迁移后的新状态以及回调机制等信息。
具体地,业务系统可以基于触发事件通过状态机实例提供的API接口提交状态迁移请求,状态机引擎加载触发事件产生的上下文数据,将该上下文数据传递到表达式引擎MVEL,MVEL将该上下文数据代入缓存中的条件表达式的编译结果进行计算(即根据上下文数据计算条件表达式结果),得到计算结果返回给状态机引擎,状态机引擎校验计算结果是否满足迁移条件,若满足,则进行状态迁移,若不满足,则返回异常提示信息给业务系统。
示例性地,针对业务系统的触发事件“退货”,状态机引擎加载该触发事件产生的上下文数据包含当前状态、退货消息、买家消息、订单交易数量、订单退货数量等,将该上下文数据通过表达式引擎MVEL进行代入到缓存中的条件表达式的编译结果进行计算,若计算结果满足退货条件,则将当前状态迁移到“退货”状态,否则返回不满足退货条件的信息提示给业务系统。
本发明实施例中,由于在业务系统通过状态机实例的接口调用状态机引擎进行状态迁移的过程中,状态机引擎直接利用表达式引擎结合迁移上下文数据对缓存中的条件表达式的编译结果进行计算,而不是在迁移过程中对条件表达式进行编译,由此使得程序运行效率更高,且能够简化状态迁移的复杂性,提高状态机引擎的工作性能。
在一个实施例中,上述的缓存编译结果步骤之后,方法还包括:
响应于业务系统通过状态机实例提供的API接口输入的指定状态,状态机引擎计算指定状态下一步可执行的操作集合,并返回给业务系统;和/或
响应于业务系统通过状态机实例提供的API接口输入的指定角色,状态机引擎计算指定角色下一步可执行的操作事件名称集合,并返回给业务系统。
具体地,在业务系统通过状态机实例提供的API接口输入的指定状态时,状态机引擎可以根据引擎内存中状态迁移表确定指定状态的下一步可执行的操作集合,将确定出的操作集合返回给业务系统。
在业务系统通过状态机实例提供的API接口输入的指定角色时,状态机引擎可以根据引擎内存中状态迁移表确定指定角色下一步可执行的操作事件名称集合,将确定出的操作事件名称集合返回给业务系统。
需要说明的是,本实施例中,状态机实例提供的用于输入指定角色的API接口、用于输入指定角色的API接口以及用于状态迁移的API接口可以为不同的接口,不同API接口用于调用状态机引擎执行不同的操作。
为了便于理解本发明的方案,以下通过一个具体示例进行说明。
参照图4所示,图4为本发明实施例提供的状态机引擎的实现流程示意图,在业务系统针对目标业务请求创建状态机实例时,状态机引擎从本地或网络侧加载该目标业务对应的规则配置文件,规则配置文件为JSON格式文件,对规则配置文件解析得到业务迁移规则,并构建引擎上下文,生成状态机实例返回给业务系统;在业务系统基于触发事件、触发角色请求状态迁移时,状态机引擎将触发事件、触发角色作为迁移上下文数据代入表达式进行计算,校验计算结果是否满足前置条件,若满足,则进行状态迁移,并将迁移成功结果返回给业务系统,业务系统将下发消息至消息队列(MQ)。
在一个实施例中,如图5所示,提供了一种状态机引擎装置,该装置可以包括:
请求接收模块501,用于接收业务系统针对目标业务发送的状态机实例创建请求;
规则加载模块502,用于根据状态机实例创建请求,加载目标业务对应的规则配置文件;
实例生成模块503,用于将规则配置文件解析为状态迁移表,并初始化引擎上下文,生成状态机实例;
实例返回模块504,用于将生成的状态机实例返回给业务系统;
预编译模块505,用于利用表达式引擎结合引擎上下文对状态迁移表中的条件表达式进行预编译,并缓存编译结果。
进一步地,规则加载模块502具体用于:
根据业务与规则配置文件的存储路径之间的对应关系,自动加载目标业务对应的规则配置文件;
其中,对应关系被预先写入状态机引擎中,或者对应关系被预先写入供状态机引擎读取的预设文件中。
进一步地,规则配置文件为JSON格式文件,实例生成模块503具体用于:
使用JSON反序列化工具将规则配置文件解析为JSON数组结构的状态迁移表。
进一步地,实例生成模块503具体用于:
使用JSON反序列化工具将规则配置文件中的状态迁移规则定义语句解析为JSON数组结构的状态迁移表。
在一个实施例中,装置还包括:
上下文加载模块,用于响应于业务系统通过状态机实例提供的API接口提交的状态迁移请求,加载业务系统输入的上下文数据;
表达式计算模块,用于利用表达式引擎对上下文数据通过缓存的编译结果进行计算;
迁移判断模块,用于判断计算的结果是否满足状态迁移表中的迁移条件,若满足,则进行状态迁移;
结果返回模块,用于将状态迁移结果通过API接口返回给业务系统。
进一步地,装置还包括:
第一计算模块,用于响应于业务系统通过状态机实例提供的API接口输入的指定状态,状态机引擎计算指定状态下一步可执行的操作集合,并返回给业务系统;和/或
第二计算模块,响应于业务系统通过状态机实例提供的API接口输入的指定角色,状态机引擎计算指定角色下一步可执行的操作事件名称集合,并返回给业务系统。
关于状态机引擎装置的具体限定可以参见上文中对于状态机引擎的实现方法的限定,在此不再赘述。上述状态机引擎装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,包括:
一个或者多个处理器;
存储器;
存储在存储器中的程序,当被一个或者多个处理器执行时,程序使处理器执行如上述实施例所述的状态机引擎的实现方法的步骤。
在一个实施例中,提供了一种计算机可读存储介质,计算机可读存储介质存储有程序,当程序被处理器执行时,使得处理器执行如上述实施例所述的状态机引擎的实现方法的步骤。
本领域内的技术人员应明白,本发明实施例中的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例中可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例中可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例中是参照根据本发明实施例中实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例中的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例中范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (6)
1.一种状态机引擎的实现方法,其特征在于,所述方法包括:
状态机引擎接收业务系统针对目标业务发送的状态机实例创建请求;
所述状态机引擎根据所述状态机实例创建请求,加载所述目标业务对应的规则配置文件;
所述状态机引擎将所述规则配置文件解析为状态迁移表,并初始化引擎上下文,生成状态机实例返回至所述业务系统;
所述状态机引擎利用表达式引擎结合所述引擎上下文对所述状态迁移表中的条件表达式进行预编译,并缓存编译结果;
其中,所述状态机引擎根据所述状态机实例创建请求,加载所述目标业务对应的规则配置文件,包括:
所述状态机引擎根据业务与规则配置文件的存储路径之间的对应关系,自动加载所述目标业务对应的规则配置文件;
其中,所述对应关系被预先写入所述状态机引擎中,或者所述对应关系被预先写入供所述状态机引擎读取的预设文件中;
所述缓存编译结果步骤之后,所述方法还包括:
响应于所述业务系统通过所述状态机实例提供的API接口提交的状态迁移请求,所述状态机引擎加载所述业务系统输入的上下文数据,并利用所述表达式引擎对所述上下文数据通过缓存的所述编译结果进行计算;
所述状态机引擎判断所述计算的结果是否满足所述状态迁移表中的迁移条件,若满足,则进行状态迁移,并将状态迁移结果通过所述API接口返回给所述业务系统。
2.根据权利要求1所述的方法,其特征在于,所述规则配置文件为JSON格式文件,所述状态机引擎将所述规则配置文件解析为状态迁移表,包括:
所述状态机引擎使用JSON反序列化工具将所述规则配置文件解析为JSON数组结构的状态迁移表。
3.根据权利要求1至2任一所述的方法,其特征在于,所述方法还包括:
响应于所述业务系统通过所述状态机实例提供的API接口输入的指定状态,所述状态机引擎计算所述指定状态下一步可执行的操作集合,并返回给所述业务系统;和/或
响应于所述业务系统通过所述状态机实例提供的API接口输入的指定角色,所述状态机引擎计算所述指定角色下一步可执行的操作事件名称集合,并返回给所述业务系统。
4.一种状态机引擎装置,其特征在于,所述装置包括:
请求接收模块,用于接收业务系统针对目标业务发送的状态机实例创建请求;
规则加载模块,用于根据所述状态机实例创建请求,加载所述目标业务对应的规则配置文件;
实例生成模块,用于将所述规则配置文件解析为状态迁移表,并初始化引擎上下文,生成状态机实例;
实例返回模块,用于将生成的所述状态机实例返回至所述业务系统;
预编译模块,用于利用表达式引擎结合所述引擎上下文对所述状态迁移表中的条件表达式进行预编译,并缓存编译结果;
所述规则加载模块具体用于:
根据业务与规则配置文件的存储路径之间的对应关系,自动加载所述目标业务对应的规则配置文件;
其中,所述对应关系被预先写入所述状态机引擎中,或者所述对应关系被预先写入供所述状态机引擎读取的预设文件中;
所述装置还包括:
上下文加载模块,用于响应于所述业务系统通过所述状态机实例提供的API接口提交的状态迁移请求,加载所述业务系统输入的上下文数据;
表达式计算模块,用于利用所述表达式引擎对所述上下文数据通过缓存的所述编译结果进行计算;
迁移判断模块,用于判断所述计算的结果是否满足所述状态迁移表中的迁移条件,若满足,则进行状态迁移;
结果返回模块,用于将状态迁移结果通过所述API接口返回给所述业务系统。
5.一种计算机设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1至3任一所述的状态机引擎的实现方法的步骤。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1至3任一所述的状态机引擎的实现方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910702763.3A CN110580155B (zh) | 2019-07-31 | 2019-07-31 | 状态机引擎的实现方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910702763.3A CN110580155B (zh) | 2019-07-31 | 2019-07-31 | 状态机引擎的实现方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110580155A CN110580155A (zh) | 2019-12-17 |
CN110580155B true CN110580155B (zh) | 2022-11-22 |
Family
ID=68810558
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910702763.3A Active CN110580155B (zh) | 2019-07-31 | 2019-07-31 | 状态机引擎的实现方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110580155B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111414242B (zh) * | 2020-03-13 | 2023-07-11 | 天津美腾科技股份有限公司 | 状态机的运行方法、装置、服务器、系统和存储介质 |
CN111708524B (zh) * | 2020-06-02 | 2024-02-23 | 苏州宏软信息技术有限公司 | 一种分布式动态有限状态机的实现方法及系统 |
CN112232755A (zh) * | 2020-09-16 | 2021-01-15 | 金蝶软件(中国)有限公司 | 单据处理方法、装置、计算机设备和存储介质 |
CN112379884B (zh) * | 2020-11-13 | 2024-01-12 | 李斌 | 基于Spark和并行内存计算的流程引擎实现方法及系统 |
KR102501140B1 (ko) * | 2020-12-21 | 2023-02-17 | 쿠팡 주식회사 | 확장성을 개선하기 위해 선택 프로세스를 간소화하는 시스템 및 방법 |
CN112907198B (zh) * | 2021-01-15 | 2024-06-21 | 浙江大搜车融资租赁有限公司 | 业务状态流转维护方法、装置及电子设备 |
CN114328549B (zh) * | 2021-12-16 | 2023-04-28 | 北京百度网讯科技有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN115348167B (zh) * | 2022-08-31 | 2024-05-07 | 云合智网(上海)技术有限公司 | 一种RowStatus状态机实现方法及装置 |
CN116186107B (zh) * | 2022-12-19 | 2024-06-11 | 中兴通讯股份有限公司 | 业务数据处理方法、装置、设备及存储介质 |
CN116977048A (zh) * | 2023-09-25 | 2023-10-31 | 天津金城银行股份有限公司 | 状态机系统、交易状态管理方法及银行交易系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101201753A (zh) * | 2007-12-13 | 2008-06-18 | 浪潮通信信息系统有限公司 | 一种多状态机管理引擎的配置管理方法 |
US9116777B1 (en) * | 2014-09-25 | 2015-08-25 | International Business Machines Corporation | In-flight process instance migration between business process execution language (BPEL) suites |
CN109597606A (zh) * | 2018-10-24 | 2019-04-09 | 中国平安人寿保险股份有限公司 | 使用规则引擎进行业务决策的方法、设备和存储介质 |
-
2019
- 2019-07-31 CN CN201910702763.3A patent/CN110580155B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101201753A (zh) * | 2007-12-13 | 2008-06-18 | 浪潮通信信息系统有限公司 | 一种多状态机管理引擎的配置管理方法 |
US9116777B1 (en) * | 2014-09-25 | 2015-08-25 | International Business Machines Corporation | In-flight process instance migration between business process execution language (BPEL) suites |
CN109597606A (zh) * | 2018-10-24 | 2019-04-09 | 中国平安人寿保险股份有限公司 | 使用规则引擎进行业务决策的方法、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110580155A (zh) | 2019-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110580155B (zh) | 状态机引擎的实现方法、装置、计算机设备及存储介质 | |
US10528395B2 (en) | Task managing application for performing tasks based on messages received from a data processing application initiated by the task managing application | |
US8014994B2 (en) | Simulation business object for service oriented architecture | |
US11467951B2 (en) | System and method for implementing mainframe continuous integration continuous development | |
CN108984567B (zh) | 一种业务数据管理系统及方法 | |
CN106104468B (zh) | 动态地确定数据处理应用程序的模式 | |
US9904574B2 (en) | Parallel computing without requiring antecedent code deployment | |
CN112486640A (zh) | 业务处理方法、装置、电子设备及计算机可读存储介质 | |
US11461078B2 (en) | Device and method for producing a backend application utilizing metaprogramming and a domain ontology having a syntactic and semantic specification | |
CN112783568A (zh) | 应用程序的初始化方法、装置、设备和存储介质 | |
EP2606424A2 (en) | System and method for execution of high performance computing applications | |
CN114115884A (zh) | 一种编程服务的管理方法以及相关装置 | |
CN116307988A (zh) | 配送订单异常的处理方法和装置、电子设备和存储介质 | |
Barbier et al. | Software adaptation: classification and a case study with state chart xml | |
CN114816357A (zh) | 一种服务于流程银行的服务编排系统 | |
CN108920219B (zh) | 一种基于开放平台的业务处理方法及装置 | |
US7752638B2 (en) | Method for defining and dynamically invoking polymorphic call flows | |
CN114489873A (zh) | 一种基于Spring StateMachine框架的消息发送时前后置增强方法 | |
CN117474312B (zh) | 可视化业务流编排方法、系统、电子设备及存储介质 | |
CN113031960B (zh) | 代码编译方法、装置、服务器及存储介质 | |
Wang et al. | Pattern-driven performance optimization at runtime: experiment on JEE systems | |
Autili et al. | A resource-oriented static analysis approach to adaptable java applications | |
CN115481156A (zh) | 一种数据处理方法、装置、设备及介质 | |
CN117112008A (zh) | 一种模型训练加速方法及装置 | |
WO2023242640A1 (en) | Automatically orchestrating a computerized workflow |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200922 Address after: No.1-9 Suning Avenue, Xuanwu District, Nanjing, Jiangsu Province, 210000 Applicant after: Nanjing suningjia e-commerce Co.,Ltd. Address before: No. 1-1 Suning Avenue, Xuzhuang Software Park, Xuanwu District, Nanjing City, Jiangsu Province, 210000 Applicant before: Suning Cloud Computing Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |