第六十六章 开发Productions - ObjectScript Productions - Production品及其零部件的生命周期 - 业务流程的生命周期
业务流程的生命周期
每次Production
启动时, IRIS
都会为Production
创建公共参与者池。ActorPoolSize
设置的值确定池中的作业数。
在执行元池中的每个作业中,都有一个Ens.ActorEns
.在一个对象中,该对象负责管理业务流程对其作业的使用。在一个Ens.Actor
时称为执行元。
Production
中的业务流程可以共享名为 Ens.Actor
的公共消息队列。此公共队列是发送到生产中没有自己的专用队列的任何业务流程的所有消息的目标。只要 Actor
有空托管业务流程,它们就会监听 Ens.Actor
队列。当请求到达 Ens.Actor
队列时,任何空闲的参与者都可以分配其作业来托管请求中指定的业务流程。 Ens.Actor
队列上的请求按照接收顺序进行处理。每个连续的请求都由下一个可用的参与者持续声明。
与业务服务和业务操作的生命周期不同,业务流程的OnInit
和OnTearDown
方法不会在业务流程启动或停止时被调用。相反,每次业务流程(InProc
或 Queued
)处理请求时都会执行这些方法。可以实现业务流程类的 OnProductionStart
方法,以在Production
开始或业务流程重新启动时执行自定义代码。当Production
停止时,将调用该类的 OnProductionStop
方法。
公共队列中的生命周期
一个使用公共队列的业务流程的生命周期如下:
- 初始请求发送至业务流程。请求消息到达
Ens.Actor
队列。 - 一旦
Actor
可用,它就会从Ens.Actor
队列中提取请求消息。 - 参与者创建适当业务流程类的新实例。调用业务流程的
OnInit()
方法。参与者提供业务流程设置的最新值并调用该实例的OnRequest()
方法。业务流程实例现在正在进行中。 - 当业务流程实例正在进行时,只要它不活动(例如,当它正在等待输入或反馈时),它通常会将控制权返回给实例化它的参与者。当这个情况发生时:
a. 参与者暂停业务流程实例。
b. 参与者将实例的当前状态保存到磁盘。
c. 参与者将其工作返回到参与者池。
- 只要正在进行的业务流程没有分配的参与者,并且后续请求或响应到达该业务流程(例如,当预期的输入或反馈到达时),就会发生以下顺序:
a. 当参与者可用时,它从Ens.Actor
队列中提取新的请求或响应消息。
b. 参与者从磁盘恢复相应的业务流程对象,并完成其所有状态信息。
c. 执行元根据需要调用OnRequest()
或OnResponse()
实例方法。
- 在业务流程实例完成执行后,其当前参与者调用其
OnComplete()
方法并将该实例标记为IsComplete
状态。actor还会将其工作返回到actor
池。不会将进一步的事件发送到此业务流程实例。调用业务流程的OnTearDown
方法。
专用队列中的生命周期
或者,可以将业务流程配置为具有私有队列,从而绕过公共Ens.Actor队列。具有专用队列的业务流程的生命周期与公共队列的描述完全相同,只是:
- 业务流程仅在私有池中的作业中运行。
- 发送至此业务流程的消息到达其自己的专用队列,并且不会到达 Ens.Actor 队列。
网友评论