保存更新失败,事务回滚,但是MQ消息发送成功

系统上线后,偶尔出现一些小的问题,逻辑处理是先保存数据,保存成功后,给别的服务发MQ消息,正常情况下,只要没有网络问题或者超时等问题,数据都能保存成功,紧接着就是发送消息,但是偶尔会出现数据保存失败,事务回滚,但是消息却发出去了!!
所以鉴于代码不完善,需要对发消息做逻辑处理

import com.lenovo.chinaservice.pscm.quality.test.utils.base.AbstractAfterCommitTransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
//保存信息
			testReturnRepository.saveTestReturnPnBaseList(testReturnPnBaseAddVOList);

			TransactionSynchronizationManager.registerSynchronization(new AbstractAfterCommitTransactionSynchronization() {
				@Override
				public void afterCommit() {
					//推送信息
					List testRecordSendMqInfoList = jointPnTestRecordMqInfo(testReturnPnBaseAddVOList);
					for(TestRecordSendMqInfo testRecordSendMqInfo:testRecordSendMqInfoList){
						log.info("**********mq***:" + testRecordSendMqInfo.toString());
						testRecordResultSendMqService.pushMQ(testRecordSendMqInfo);
					}
				}
			});

增加逻辑中增加了AbstractAfterCommitTransactionSynchronization抽象类,用于事务成功提交后,在执行发送消息,代码如下:


import org.springframework.transaction.support.TransactionSynchronization;

public abstract class AbstractAfterCommitTransactionSynchronization implements TransactionSynchronization {

    @Override
    public void suspend() {
    }

    @Override
    public void resume() {
    }

    @Override
    public void flush() {
    }

    @Override
    public void beforeCommit(boolean readOnly) {
    }

    @Override
    public void beforeCompletion() {
    }

    @Override
    public void afterCompletion(int status) {
    }

}

项目上线后,出现一些稀奇古怪的问题,但很多都是自己逻辑处理不完善,考虑不周到导致,后续有类似问题,再分享给大家。。。。

你可能感兴趣的:(Rabbit,MQ)