CN101677303A - 一种基于状态变化的流程控制中消息订阅和分发系统 - Google Patents
一种基于状态变化的流程控制中消息订阅和分发系统 Download PDFInfo
- Publication number
- CN101677303A CN101677303A CN200810222437A CN200810222437A CN101677303A CN 101677303 A CN101677303 A CN 101677303A CN 200810222437 A CN200810222437 A CN 200810222437A CN 200810222437 A CN200810222437 A CN 200810222437A CN 101677303 A CN101677303 A CN 101677303A
- Authority
- CN
- China
- Prior art keywords
- message
- flow
- subscribing
- state
- flow process
- 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.)
- Granted
Links
Images
Landscapes
- Multi Processors (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种消息订阅和分发系统,尤其是公开了一种基于状态变化的流程控制中消息订阅和分发系统。现有技术存在效率低和数据冗余等缺陷。本发明所述的系统,包括消息订阅方、流程定义装置、流程引擎装置和数据库。流程定义装置包括订阅符合同一流程定义的所有流程实例在执行过程中产生的消息的静态消息订阅模块。流程引擎装置包括用于订阅任意一个流程实例在执行过程中产生的消息的动态消息订阅模块、用于设置任务的状态和产生消息的任务处理模块以及用于将产生的消息分发给该消息的订阅者的消息分发模块。流程定义装置与数据库连接,流程引擎装置分别与消息订阅方和数据库连接。采用本发明所述的系统能够提高效率和减少数据冗余。
Description
技术领域
本发明涉及一种消息订阅和分发系统,尤其是涉及一种基于状态变化的流程控制中消息订阅和分发系统。
背景技术
目前,常见的流程引擎主要表现为两种形式:一种是基于顺序的,另一种是基于状态的。基于状态的流程控制,顾名思义,其核心是状态。这里的状态,既包括流程实例的状态,又包括流程任务的状态。它区别于基于顺序的流程具体表现为:不限制流程的流向,节点的处理顺序完全依赖于节点的状态变化,以及对状态变化所作的配置。这些配置将决定节点状态发生变化时的其他节点的后续动作。
基于状态的流程控制的定义部分主要包括流程定义、流程节点、流程实例和流程任务。流程定义是对流程引擎的一种工作模式的描述,其实体为一个XML,描述了流程需要经历哪些节点,并采用何种顺序经历这些节点,以及其他一些完成该流程所必需的配置属性。流程节点是流程定义的子对象,描述流程中每一个需要处理的部分。流程实例是对流程定义的一次对象化,即从流程开始到流程结束的一个独立过程。流程任务是流程实例的子对象,是流程节点的一次对象化。
图1出示了基于状态的流程运行示意图,其中描述的节点流向箭头不再具有约束作用,而起决定作用的是在流程定义中配置的节点状态依赖关系,状态依赖关系配置表如下表所示。
流程定义定义了流程引擎的基本工作模式,但是如果让流程真正的运转起来,需要外部应用系统参与流程的处理过程,包括发起、执行、中断和关闭等。然而让外部应用系统参与流程的处理过程仅仅依靠对状态的设置是不够的,应用系统必须及时地知悉流程当前执行到哪个节点、该节点的状态如何、状态何时变化以及流程的进度等信息。当前,应用系统获得流程状态变化的信息主要通过轮询方式或者回调方式。轮询方式是应用系统不断地询问流程的状态是否发生变化,这种方式的效率较低。回调方式是流程引擎主动调用参与流程的应用系统,通知流程状态的变化情况,这种方式流程引擎与参与方的耦合性较大,如果调用阻塞或者失败,会对流程的执行产生影响。而且,流程的状态一旦发生变化系统便会产生消息,而一些消息是无用的信息,从而造成了系统数据的冗余。
发明内容
针对现有技术中存在的缺陷,本发明的目的是提供一种基于状态变化的流程控制中消息订阅和分发系统,该系统能够提高获得流程状态变化信息的效率,降低系统的数据冗余。
为了实现上述目的,本发明采用的技术方案是:一种基于状态变化的流程控制中消息订阅和分发系统,包括消息订阅方、流程定义装置、流程引擎装置和数据库。其中,所述的流程定义装置包括订阅符合同一流程定义的所有流程实例在执行过程中产生的消息的静态消息订阅模块。所述的流程引擎装置包括用于订阅任意一个流程实例在执行过程中产生的消息的动态消息订阅模块、用于设置任务的状态和产生消息的任务处理模块以及用于将产生的消息分发给该消息的订阅者的消息分发模块。所述的流程定义装置与数据库连接,流程引擎装置分别与消息订阅方和数据库连接。
如上所述的基于状态变化的流程控制中消息订阅和分发系统,所述的静态消息订阅模块包括用于订阅整个流程的状态发生变化时生成的消息的流程实例订阅子模块和用于订阅一个流程中的节点所对应的流程任务的状态发生变化时生成的消息的流程任务订阅子模块。
如上所述的基于状态变化的流程控制中消息订阅和分发系统,所述的动态消息订阅模块包括流程发起方订阅子模块和流程参与方订阅子模块;所述的流程发起方订阅子模块订阅消息的过程为:当流程发起成功后,发起方得到该次流程实例的ID,然后利用该次流程实例的ID订阅该次流程实例的所有消息;所述的流程参与方订阅子模块订阅消息的过程为:首先在流程定义中定义某个节点的消息订阅方,当流程执行到该节点时,将产生的状态变化消息发送到该节点的消息订阅方,消息订阅方从获取的消息中得到此次流程实例的ID,然后再利用此次流程实例的ID订阅该节点后流程执行过程中生成的所有消息。
如上所述的基于状态变化的流程控制中消息订阅和分发系统,所述的消息订阅方通过流程引擎装置提供接口与动态消息订阅模块进行交互,所述的接口包括所有实例消息订阅接口、具体实例消息订阅接口、订阅消息取消接口和订阅消息获取接口。
如上所述的基于状态变化的流程控制中消息订阅和分发系统,所述的任务处理模块包括用于设置流程状态的状态设置器和用于产生消息的消息产生器,所述的消息产生器与消息分发模块相连。
如上所述的基于状态变化的流程控制中消息订阅和分发系统,所述的消息分发模块分发消息的过程为:首先将消息产生器产生的消息放入一个消息队列中,所述的消息队列存储在数据库中,消息订阅方定期或不定期的从该消息队列中获取自己订阅的消息。
采用本发明所述的系统,参与流程的应用系统通过订阅消息的方式获知流程的状态发生变化的信息,提高了获得流程状态变化信息的效率,降低了系统的数据冗余。而且,消息的订阅支持两种方式,即可以预先进行静态订阅,又可以在流程执行过程中进行动态订阅。消息分发时采用消息队列的形式,可以最大限度地降低系统压力,使资源利用达到均衡。
附图说明
图1是基于状态的流程运行示意图;
图2是本发明所述的系统结构图;
图3是本发明具体实施方式中发起方动态订阅消息的流程图;
图4是本发明具体实施方式中参与方动态订阅消息的流程图;
图5是本发明具体实施方式中消息产生和分发的数据流图。
具体实施方式
下面结合具体实施方式和附图对本发明进行详细描述。
本发明所述的系统主要应用于基于状态变化的流程控制体系中,即流程驱动的主要动力为节点状态的变化。参与流程处理过程的外部应用系统或客户程序等(以下通称消息订阅方)必须实时地知悉流程当前执行到哪个节点、该节点的状态、状态何时变化以及流程的进度等信息。为此,本发明引入了消息的概念,消息订阅方通过其订阅的消息来了解上述的状态信息。那么,消息如何订阅以及分发便是本发明所要解决的问题。
图2出示了本发明所述的基于状态变化的流程控制中消息订阅和分发系统的结构,包括消息订阅方、流程定义装置、流程引擎装置和数据库。其中,消息订阅方包括客户程序、应用服务和应用系统等,流程定义装置包括订阅符合同一流程定义的所有流程实例在执行过程中产生的消息的静态消息订阅模块,流程引擎装置包括用于订阅任意一个流程实例在执行过程中产生的消息的动态消息订阅模块、用于设置任务的状态和产生消息的任务处理模块以及用于将产生的消息分发给该消息的订阅者的消息分发模块。流程定义装置与数据库连接,流程引擎装置分别与消息订阅方和数据库连接。
本发明所述的消息订阅方式分为静态订阅和动态订阅。所谓静态订阅是指在流程定义中定义了消息订阅方,在每次应用该流程定义的流程实例的执行过程中产生的消息均发送给该消息订阅方。所谓动态订阅是指消息订阅方能够任意在任何一个流程实例中订阅消息。
静态订阅的实现是和流程定义分不开的,一个流程定义实际上就是具体流程实例的模板,在流程定义中描述的内容将被应用到所有使用该流程定义的流程实例中去。例如一个传输流程,如果在传输流程定义中定义了消息的接收者,那么每次应用该定义的传输流程所产生的消息都会发送给该接收者。因此,静态订阅模块设置在流程定义装置中。在流程定义装置定义流程的过程中,静态订阅模块完成消息订阅方订阅消息的任务。
静态订阅可以订阅两部分内容:流程实例的订阅和流程任务的订阅。所谓流程实例的订阅是指订阅整个流程的状态发生变化时生成的消息。而流程任务的订阅只指订阅一个流程中某个节点所对应的流程任务产生的消息。因此,静态消息订阅模块包括用于订阅整个流程的状态发生变化时生成的消息的流程实例订阅子模块和用于订阅一个流程中的节点所对应的流程任务生成的消息的流程任务订阅子模块。
流程实例的订阅在流程定义中的描述如下:
<WorkflowDefine><WorkflowName>流程名称</WorkflowName><BeforeStatusChanged/><AfterStatusChanged><Listener><PostMessage><Description>通知×××获取实例的消息</Description><Receiver>接收者1</Receiver><Lifecycle>0</Lifecycle></PostMessage></Listener></AfterStatusChanged><Actions>....</WorkflowDefine> |
流程任务的订阅在流程定义中位于节点Action之下,其内容如下:
<Actions><Action><ActionID>任务ID</ActionID><ActionName>任务名称</ActionName><StatusChanges>状态变化依赖关系</StatusChanges><BeforeStatusChanged/><AfterStatusChanged><Listener><PostMessage><Description>通知××获取任务的消息</Description><Receiver>接收者2</Receiver><Lifecycle>0</Lifecycle></PostMessage></Listener></AfterStatusChanged></Action><Action left=″40″top=″40″>其他节点...</Actions> |
在上述的XML描述里,Receiver(接收者)可以有多个,即可以为一个消息配置多个消息订阅方,消息产生器为每个消息订阅方都产生一个消息。Lifecycle表示消息的生命期,由于消息是在消息队列中“等待”消息订阅方来获取,因此如果超过生命期以后消息没有被取走,则被视为“过期”作废。另外,Listener节点也可以是多个,即可以为消息指定多组接收者,每组产生的消息生命期相同,但不同组之间可以不同。
静态消息订阅模块完成消息的订阅后,将订阅信息存入数据库中,以便其他模块查阅。
动态订阅与静态订阅不同,它更加灵活。消息订阅方只选择它所关心的流程实例进行订阅,而不必要接收所有应用同一流程定义的所有流程实例的消息,这一点是它与静态订阅的主要区别。动态订阅也被分为两种类型:一种是流程发起方的订阅,一种是流程参与方的订阅。因此,动态消息订阅模块包括流程发起方订阅子模块和流程参与方订阅子模块。
图3出示了流程发起方订阅子模块的工作流程。对于发起方来说,流程发起成功后会得到该次流程实例的ID信息,借助流程实例的ID,流程发起方订阅子模块可以为消息订阅方完成该实例中所有消息的动态订阅。
图4出示了流程参与方订阅子模块的工作流程。对于流程的参与方来说,它们并不知道自己将参与的流程实例。因此它们的动态订阅是从静态订阅开始的。例如,消息订阅方B是“传输流程”的一个参与者,在流程定义中定义了B为节点2的消息接收者。那么当流程进行到节点2的时候,会产生节点2的状态变化的消息,B获得该消息后,便能够从该消息中获取流程实例的ID信息。所以,B在“传输流程”的中间位置开始参与到流程中来,那么从这个时刻起流程参与方订阅子模块就可以为消息订阅方完成该流程实例此后的所有消息的动态订阅。
动态订阅的具体实现方式是消息订阅方通过流程引擎装置提供接口与动态消息订阅模块进行交互,来实现消息的动态订阅。与动态订阅相关的接口包括:所有实例消息订阅接口、具体实例消息订阅接口、取消消息订阅接口和订阅消息获取接口。
/***订阅所有实例的消息*@param workinstanceid*@param appName*@return 订阅实例消息成功返回0长度字符串*/public String subscribe(String workinstanceid,String appName) |
/***订阅具体实例的消息*@param workinstanceid流程实例的ID*@param appName订阅该实例消息的程序名(应用系统名称+应用程序名称)*@return 订阅实例消息成功返回0长度字符串*/public String subscribe(String workinstanceid,String appName) |
/***取消订阅*@param workinstanceid实例ID*@param appName*@return 取消订阅实例消息成功返回0长度字符串*/public String unsubscribe(String workinstanceid,String appName) |
/***获取订阅到的消息*@param appName*@return 获取消息,格式详见XSD,MessageBody.xsd*/public String getSubscribeMessages(String appName) |
图5出示了消息产生和分发的数据流图。
在流程执行过程中,当流程的状态发生变化时,消息产生器根据该状态变化消息的订阅情况为每一个消息订阅方产生消息。产生消息的条件主要有两个:①是流程实例或流程任务的状态发生了变化,②是该实例或任务已经被消息订阅方订阅。条件①指明了消息的内容,条件②则限定了消息的接收者,两个条件缺一不可。
消息产生器将产生的消息送入消息分发模块,消息分发模块再将消息分发给该消息的订阅方。本实施方式中,消息分发是通过在数据库中建立的一个消息队列实现的。当生成消息后,将该消息放入消息队列中,消息订阅方定期或不定期的从队列中获取属于自己的消息。每个消息都具有生命期,如果超过生命期以后该消息还没有被取走,则被视为过期作废,将其从消息队列中删除。
另外,消息的动态订阅需要指定要订阅的流程实例的ID,但是在动态订阅的消息分发时,消息订阅方并不需要指明要获取的流程实例ID。消息订阅方每次都将其当前订阅过的所有流程实例的消息一次性取回,这大大提高了消息传送的效率并有效的降低了系统负荷。
本发明所述的系统并不限于上述具体实施方式,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。
Claims (6)
1.一种基于状态变化的流程控制中消息订阅和分发系统,包括消息订阅方、流程定义装置、流程引擎装置和数据库,其特征在于:所述的流程定义装置包括订阅符合同一流程定义的所有流程实例在执行过程中产生的消息的静态消息订阅模块,所述的流程引擎装置包括用于订阅任意一个流程实例在执行过程中产生的消息的动态消息订阅模块、用于设置任务的状态和产生消息的任务处理模块以及用于将产生的消息分发给该消息的订阅者的消息分发模块;所述的流程定义装置与数据库连接,流程引擎装置分别与消息订阅方和数据库连接。
2.如权利要求1所述的基于状态变化的流程控制中消息订阅和分发系统,其特征在于:所述的静态消息订阅模块包括用于订阅整个流程的状态发生变化时生成的消息的流程实例订阅子模块和用于订阅一个流程中的节点所对应的流程任务的状态发生变化时生成的消息的流程任务订阅子模块。
3.如权利要求1所述的基于状态变化的流程控制中消息订阅和分发系统,其特征在于:所述的动态消息订阅模块包括流程发起方订阅子模块和流程参与方订阅子模块;所述的流程发起方订阅子模块订阅消息的过程为:当流程发起成功后,发起方得到该次流程实例的ID,然后利用该次流程实例的ID订阅该次流程实例的所有消息;所述的流程参与方订阅子模块订阅消息的过程为:首先在流程定义中定义某个节点的消息订阅方,当流程执行到该节点时,将产生的状态变化消息发送到该节点的消息订阅方,消息订阅方从获取的消息中得到此次流程实例的ID,然后再利用此次流程实例的ID订阅该节点后流程执行过程中生成的所有消息。
4.如权利要求1所述的基于状态变化的流程控制中消息订阅和分发系统,其特征在于:所述的消息订阅方通过流程引擎装置提供接口与动态消息订阅模块进行交互,所述的接口包括所有实例消息订阅接口、具体实例消息订阅接口、订阅消息取消接口和订阅消息获取接口。
5.如权利要求1所述的基于状态变化的流程控制中消息订阅和分发系统,其特征在于:所述的任务处理模块包括用于设置流程状态的状态设置器和用于产生消息的消息产生器,所述的消息产生器与消息分发模块相连。
6.如权利要求5所述的基于状态变化的流程控制中消息订阅和分发系统,其特征在于,所述的消息分发模块分发消息的过程为:首先将消息产生器产生的消息放入存储在数据库中的一个消息队列,消息订阅方定期或不定期的从该消息队列中获取自己订阅的消息;所述的消息具有生命期,如果超过生命期以后该消息还没有被取走,则被视为过期作废,将其从消息队列中删除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810222437.4A CN101677303B (zh) | 2008-09-17 | 2008-09-17 | 一种基于状态变化的流程控制中消息订阅和分发系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810222437.4A CN101677303B (zh) | 2008-09-17 | 2008-09-17 | 一种基于状态变化的流程控制中消息订阅和分发系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101677303A true CN101677303A (zh) | 2010-03-24 |
CN101677303B CN101677303B (zh) | 2014-06-04 |
Family
ID=42029724
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200810222437.4A Expired - Fee Related CN101677303B (zh) | 2008-09-17 | 2008-09-17 | 一种基于状态变化的流程控制中消息订阅和分发系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101677303B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104933118A (zh) * | 2015-06-05 | 2015-09-23 | 东南大学 | 一种基于主题的发布/订阅系统中的流程定义元模型及其构建方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004068303A2 (en) * | 2003-01-21 | 2004-08-12 | E-Book Systems Pte Ltd. | A programmable virtual book system |
CN1558656A (zh) * | 2004-01-20 | 2004-12-29 | 联想(北京)有限公司 | 一种基于voicexml的电话语音实时交互系统和方法 |
-
2008
- 2008-09-17 CN CN200810222437.4A patent/CN101677303B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004068303A2 (en) * | 2003-01-21 | 2004-08-12 | E-Book Systems Pte Ltd. | A programmable virtual book system |
CN1558656A (zh) * | 2004-01-20 | 2004-12-29 | 联想(北京)有限公司 | 一种基于voicexml的电话语音实时交互系统和方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104933118A (zh) * | 2015-06-05 | 2015-09-23 | 东南大学 | 一种基于主题的发布/订阅系统中的流程定义元模型及其构建方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101677303B (zh) | 2014-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100592693C (zh) | 用于在广域分组网络系统中快速收敛生成树的多播ip区域 | |
CN102377686B (zh) | 一种消息订阅系统、消息订阅方法及装置 | |
KR20220047796A (ko) | 실시간 메시지들을 전달하기 위한 메시징 플랫폼 | |
CN103297395B (zh) | 一种互联网业务的实现方法、系统以及装置 | |
CN101483655B (zh) | 一种互联网组管理协议报文传输方法和代理设备 | |
CN105959395A (zh) | 一种集群自反馈式负载均衡调度系统及方法 | |
CN102355413A (zh) | 一种大规模实时统一消息空间的方法及其系统 | |
JP5026617B2 (ja) | マルチホップ中継通信システムにおけるマルチキャスト・ツリー管理のための方法および装置 | |
CN102664947A (zh) | 分布式系统中的通知分发方法 | |
WO2020211629A1 (zh) | 一种基于区块链的短链接消息监听方法及装置 | |
WO2004036382A2 (en) | Method and system to communicate messages in a computer network | |
CN105208097B (zh) | 主数据共享装置和方法 | |
CN107122232B (zh) | 一种多媒体任务处理装置及方法 | |
EP1744519A8 (en) | Information exchange system, management server, and method for reducing the network load | |
CN101315609A (zh) | 实现单进程中组件间进行通信的装置和方法 | |
CN101141397A (zh) | 单播到组播切换方法 | |
CN101252602A (zh) | 文件分发及下载的方法和系统 | |
CN106230914A (zh) | 一种基于订阅信息发布的电子白板数据共享系统 | |
CN101676933B (zh) | 一种基于状态变化的流程控制中消息订阅和分发方法 | |
CN101677303A (zh) | 一种基于状态变化的流程控制中消息订阅和分发系统 | |
CN101094196A (zh) | 传送文件的方法及系统 | |
CN101047691B (zh) | 一种对订阅进行集中控制的方法 | |
CN108768787B (zh) | 一种区块链节点激励方法及装置 | |
CN103095827B (zh) | 一种基于随机网络编码的本地多客户端协同数据下载方法 | |
WO2013000231A1 (zh) | 批量业务处理的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140604 Termination date: 20160917 |
|
CF01 | Termination of patent right due to non-payment of annual fee |