跳到主要内容

流程实例状态消息管理

核心概念:流程管理 | 流程实例状态消息管理 | 概览

流程实例状态消息管理模块用于记录工作流系统与业务系统之间的异步消息传递详情,确保审批流程状态变更能够可靠地通知到各业务系统。


核心概念:流程管理 | 流程实例状态消息管理 | 为什么需要消息管理

为什么需要消息管理​

当审批流程的状态发生变化(如审批通过、审批拒绝、流程取消等)时,需要通知各业务系统进行相应的业务处理。由于工作流系统与业务系统是独立的微服务,无法使用本地事务保证数据一致性,因此采用 Kafka 消息队列 进行异步通知。

消息管理模块的作用:

  • 记录消息状态:追踪每条消息的发送和处理结果
  • 失败重试:对处理失败的消息支持手动重发
  • 问题排查:记录异常信息,便于定位问题

核心概念:流程管理 | 流程实例状态消息管理 | 1. 消息列表

1. 消息列表​

消息列表展示了工作流系统发送给业务系统的所有流程状态变更消息记录。

菜单路径:流程管理 -> 流程实例状态消息

列表查询

1.1 列表字段说明​

字段说明
ID消息记录主键
父ID父消息ID,0表示原始消息,非0表示子消息(按业务类型拆分)
消息唯一标识消息的全局唯一标识,用于幂等处理
流程实例ID关联的流程实例ID
流程模型定义Key流程模型的唯一标识
流程实例状态流程当前状态(审批中、审批通过、审批不通过、已取消等)
业务ID业务记录ID
消息消息内容(JSON格式)
状态消息处理状态
已重发次数消息重试次数
重试的kafka主题消息发送的Kafka主题
异常消息处理失败时的异常信息
创建时间消息创建时间

1.2 流程实例状态​

状态说明
审批中流程正在审批流转中
审批通过流程已结束,审批结果为通过
审批不通过流程已结束,审批被驳回或拒绝
已取消流程被发起人或管理员取消

1.3 消息状态​

消息状态类型

状态说明
待处理消息已创建,等待处理
处理成功业务系统已成功处理
处理失败业务系统处理失败
已忽略消息已被手动忽略,不再处理

核心概念:流程管理 | 流程实例状态消息管理 | 2. 消息重试

2. 消息重试​

当消息处理失败时,可以通过重试功能重新发送消息到业务系统。

消息重试

2.1 重试操作​

点击列表中的 "重试" 按钮,可打开重试配置弹窗:

配置项说明
父ID父消息ID
消息唯一标识消息的全局唯一标识
流程实例ID关联的流程实例ID
流程模型定义Key流程模型的唯一标识
流程实例状态流程当前状态
业务ID业务记录ID
消息消息内容(JSON格式)
状态当前消息状态
已重复次数已重试次数
kafka主题可修改重发到的Kafka主题

2.2 重要提示​

注意

父ID等于0时,重发消息会导致所有相关业务都收到数据。

当父ID为0时,表示这是一条原始消息,可能会被多个业务系统订阅。重发此类消息会导致所有订阅该消息的业务系统都收到通知。


核心概念:流程管理 | 流程实例状态消息管理 | 3. 其他操作

3. 其他操作​

3.1 忽略消息​

对于待处理或处理失败的消息,可以选择 "忽略" 操作,不再处理该消息。

忽略处理失败的消息

适用场景:

  • 消息已过期,无需再处理
  • 业务已通过其他方式解决

3.2 删除消息​

点击 "删除" 按钮可删除消息记录。

3.3 查看详情​

对于处理失败的消息,可以点击 "详情" 查看完整的异常堆栈信息,便于问题排查。


核心概念:流程管理 | 流程实例状态消息管理 | 4. 业务系统集成

4. 业务系统集成​

业务系统需要继承 BpmProcessInstanceStatusEventListener 类来订阅流程状态变更消息。

4.1 集成方式​

@Component
public class MyProcessStatusEventListener extends BpmProcessInstanceStatusEventListener {

@Override
protected String getProcessDefinitionKey() {
return "my_process_key"; // 监听指定流程
}

@Override
protected void onEvent(BpmProcessInstanceStatusEvent event) {
// 处理消息
String processInstanceId = event.getId();
Integer status = event.getStatus();
String businessKey = event.getBusinessKey();
// ... 业务处理逻辑
}
}

4.2 消息处理流程​

Mermaid Diagram Code:

flowchart TD
    A[流程状态变更] --> B[创建消息记录]
    B --> C[发送到Kafka]
    C --> D[业务系统监听]
    D --> E{处理成功?}
    E -->|是| F[更新消息状态为成功]
    E -->|否| G[更新消息状态为失败]
    G --> H[记录异常信息]
    H --> I[等待重试]

4.3 注意事项​

  1. 幂等处理:业务系统需要根据 messageKey 做幂等处理,避免重复消费
  2. 异常处理:处理失败时应抛出异常,让消息中心记录失败状态
  3. 流程过滤:通过重写 getProcessDefinitionKey() 或 getProcessDefinitionKeyStartWith() 方法过滤只处理特定流程的消息
开发文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答