流程实例状态消息管理
流程实例状态消息管理模块用于记录工作流系统与业 务系统之间的异步消息传递详情,确保审批流程状态变更能够可靠地通知到各业务系统。
为什么需要消息管理
当审批流程的状态发生变化(如审批通过、审批拒绝、流程取消等)时,需要通知各业务系统进行相应的业务处理。由于工作流系统与业务系统是独立的微服务,无法使用本地事务保证数据一致性,因此采用 Kafka 消息队列 进行异步通知。
消息管理模块的作用:
- 记录消息状态:追踪每条消息的发送和处理结果
- 失败重试:对处理失败的消息支持手动重发
- 问题排查:记录异常信息,便于定位问题
1. 消息列表
消息列表展示了工作流系统发送给业务系统的所有流程状态变更消息记录。
菜单路径:流程管理 -> 流程实例状态消息

1.1 列表字段说明
| 字段 | 说明 |
|---|---|
| ID | 消息记录主键 |
| 父ID | 父消息ID,0表示原始消息,非0表示子消息(按业务类型拆分) |
| 消息唯一标识 | 消息的全局唯一标识,用于幂等处理 |
| 流程实例ID | 关联的流程实例ID |
| 流程模型定义Key | 流程模型的唯一标识 |
| 流程实例状态 | 流程当前状态(审批中、审批通过、审批不通过、已取消等) |
| 业务ID | 业务记录ID |
| 消息 | 消息内容(JSON格式) |
| 状态 | 消息处理状态 |
| 已重发次数 | 消息重试次数 |
| 重试的kafka主题 | 消息发送的Kafka主题 |
| 异常消息 | 处理失败时的异常信息 |
| 创建时间 | 消息创建时间 |
1.2 流程实例状态
| 状态 | 说明 |
|---|---|
| 审批中 | 流程正在审批流转中 |
| 审批通过 | 流程已结束,审批结果为通过 |
| 审批不通过 | 流程已结束,审批被驳回或拒绝 |
| 已取消 | 流程被发起人或管理员取消 |
1.3 消息状态
| 状态 | 说明 |
|---|---|
| 待处理 | 消息已创建,等待处理 |
| 处理成功 | 业务系统已成功处理 |
| 处理失败 | 业务系统处理失败 |
| 已忽略 | 消息已被手动忽略,不再处理 |
2. 消息重试
当消息处理失败时,可以通过重试功能重新发送消息到业务系统。
-b0a9454ac002ecf7b201c6696c6db2c7.png)
2.1 重试操作
点击列表中的 "重试" 按钮,可打开重试配置弹窗:
| 配置项 | 说明 |
|---|---|
| 父ID | 父消息ID |
| 消息唯一标识 | 消息的全局唯一标识 |
| 流程实例ID | 关联的流程实例ID |
| 流程模型定义Key | 流程模型的唯一标识 |
| 流程实例状态 | 流程当前状态 |
| 业务ID | 业务记录ID |
| 消息 | 消息内容(JSON格式) |
| 状态 | 当前消息状态 |
| 已重复次数 | 已重试次数 |
| kafka主题 | 可修改重发到的Kafka主题 |
2.2 重要提示
注意
父ID等于0时,重发消息会导致所有相关业务都收到数据。
当父ID为0时,表示这是一条原始消息,可能会被多个业务 系统订阅。重发此类消息会导致所有订阅该消息的业务系统都收到通知。
3. 其他操作
3.1 忽略消息
对于待处理或处理失败的消息,可以选择 "忽略" 操作,不再处理该消息。

适用场景:
- 消息已过期,无需再处理
- 业务已通过其他方式解决
3.2 删除消息
点击 "删除" 按钮可删除消息记录。
3.3 查看详情
对于处理失败的消息,可以点击 "详情" 查看完整的异常堆栈信息,便于问题排查。
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 消息处理流程
4.3 注意事项
- 幂等处理:业务系统需要根据
messageKey做幂等处理,避免重复消费 - 异常处理:处理失败时应抛出异常,让消息中心记录失败状态
- 流程过滤:通过重写
getProcessDefinitionKey()或getProcessDefinitionKeyStartWith()方法过滤只处理特定流程的消息