in src/main/java/com/aliyun/mns/client/TransactionQueue.java [94:133]
public void run() {
log.info("CheckTransactionMesssage thread start");
while (!isCheckerStop) {
try {
Message opLogMessage = opLogQueue.popMessage();// use long polling.
Message transMessage = null;
if (opLogMessage != null) {
log.info("get an op log for message:" + opLogMessage.getMessageBody());
transMessage = new Message();
transMessage.setReceiptHandle(opLogMessage.getMessageBody());
boolean isTransSuccess = false;
try {
isTransSuccess = tChecker.checkTransactionStatus(transMessage);
} catch (Exception e) {
log.error("exception occurs when doing checkTransactionStatus with:"
+ opLogMessage.getMessageBody()
+ "exception message is:" + e.getMessage());
}
if (isTransSuccess) { // transaction success, commit the message.
commitMessage(transMessage);
} else {
// transaction fail, rollback message and confirm op log.
rollbackMessage(transMessage);
}
confirmOpLogMessage(opLogMessage);
}
//else: in most time, operation log queue is empty and nothing need to do.
} catch (Exception e) {
log.error("exception occurs:" + e.getMessage());
e.printStackTrace();
}
//sleep.
mySleep(checkIntervalInMillisecond);
}
log.info("CheckTransactionMesssage thread end");
}