fix: 任务异步状态问题
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user