工作流引擎突发事件

突发事件

突发事件是在流程引擎中发生的重要事件。这些事件通常表明与流程执行相关的某种问题。此类事件的示例可能是失败的作业,其中重试用尽(重试= 0),这表明执行被卡住,并且需要人工管理措施来修复流程实例。如果发生此类事件,则流程引擎将触发一个内部事件,该事件可由可配置的事件处理程序处理。

在默认配置中,流程引擎将事件写入流程引擎数据库。然后,您可以使用IncidentQuery暴露的信息向数据库查询不同类型和种类的事件RuntimeService:

runtimeService.createIncidentQuery()

  .processDefinitionId("someDefinition")

  .list();

事件存储在ACT_RU_INCIDENT数据库表中。

如果要自定义事件处理行为,则可以替换流程引擎配置中的默认事件处理程序,并提供自定义实现(请参见下文)。

事件类型

有不同类型的事件。当前,流程引擎支持以下事件:

1、failedJob:当作业的自动重试(计时器或异步继续)已用尽时引发。该事件表明相应的执行被卡住,不会自动继续。必须采取行政措施。当手动执行作业或将对应作业的重试设置为值> 0时,该事件已解决。

2、failedExternalTask:当外部任务的工作程序报告失败并且给定的重试设置为值<= 0 时引发。事件表明相应的外部任务被卡住,并且不会被工作程序提取。必须采取管理措施才能重试重试。

可以使用Java API创建任何类型的自定义事件。

创建和解决自定义事件

可以通过调用RuntimeService#createIncident… 创建任何类型的事件。

runtimeService.createIncident("someType", "someExecution", "someConfiguration", "someMessage");

…或直接DelegateExecution#createIncident。

delegateExecution.createIncident("someType", "someConfiguration", "someMessage");

自定义事件必须始终与现有执行相关。

可以通过调用来解决任何类型的事件,但failedJobfailedExternalTask除外RuntimeService#resolveIncident。

也可以通过REST API 创建解决事件。

(取消)激活事件

流程引擎允许您根据事件类型配置是否引发某些事件。org.camunda.bpm.engine.ProcessEngineConfiguration该类中提供以下属性:

1、createIncidentOnFailedJobEnabled:指示是否应引发失败作业事件。

实施自定义事件处理程序

事件处理程序负责处理某种类型的事件(请参阅事件类型)。

事件处理程序实现以下接口:

public interface IncidentHandler {

  String getIncidentHandlerType();

  Incident handleIncident(IncidentContext context, String message);

  void resolveIncident(IncidentContext context);

  void deleteIncident(IncidentContext context);}

handleIncident创建新事件时将调用该方法。resolveIncident解决事件后将调用该方法。如果要提供自定义事件处理程序实现,则可以使用以下方法替换一个或多个事件处理程序:

org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl.setCustomIncidentHandlers(List<IncidentHandler>)

定制事件处理程序的示例可以是一个处理程序,该处理程序通过在发生任何类型的事件时向管理员发送电子邮件来扩展默认行为failedJob。但是,仅添加自定义事件处理程序将用自定义事件处理程序行为覆盖默认行为。结果,默认事件处理程序不再执行。如果还应该执行默认行为,那么自定义事件处理程序还需要调用默认事件处理程序,包括使用内部API。

使用内部API

请注意,此API 不是公共API的一部分,在以后的发行版中可能会更改。

 

 技术支持:盘古BPM工作流平台

相关教程