fix: 任务异步状态问题

This commit is contained in:
2026-07-22 17:48:57 +08:00
parent 677f46142e
commit 7360ac1c0f

View File

@@ -18,6 +18,8 @@ import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import java.util.EnumMap;
import java.util.Map;
@@ -116,7 +118,19 @@ public class TransportTaskOperationManager {
task.setCallbackStatus(CallbackStatusEnum.PENDING.getCode());
transportTaskMapper.updateById(task);
publishEvent(task, TaskEventTypeEnum.TASK_FINISHED, reqDTO.getPayload());
// MQ 在事务提交后发送,避免 Consumer 读到未提交的数据
Map<String, Object> payload = reqDTO.getPayload();
if (TransactionSynchronizationManager.isSynchronizationActive()) {
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronization() {
@Override
public void afterCommit() {
publishEvent(task, TaskEventTypeEnum.TASK_FINISHED, payload);
}
});
} else {
publishEvent(task, TaskEventTypeEnum.TASK_FINISHED, payload);
}
}
/**
@@ -139,7 +153,19 @@ public class TransportTaskOperationManager {
task.setCallbackStatus(CallbackStatusEnum.PENDING.getCode());
transportTaskMapper.updateById(task);
publishEvent(task, TaskEventTypeEnum.TASK_CANCELLED, reqDTO.getPayload());
// MQ 在事务提交后发送,避免 Consumer 读到未提交的数据
Map<String, Object> payload = reqDTO.getPayload();
if (TransactionSynchronizationManager.isSynchronizationActive()) {
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronization() {
@Override
public void afterCommit() {
publishEvent(task, TaskEventTypeEnum.TASK_CANCELLED, payload);
}
});
} else {
publishEvent(task, TaskEventTypeEnum.TASK_CANCELLED, payload);
}
}
/**