in src/main/java/com/aliyun/mns/client/TransactionQueue.java [270:310]
public Message sendTransMessage(Message message, TransactionOperations operations) throws ServiceException,
ClientException {
String handler = null;
Message prepareMsg = null;
Message opLogMessage = null;
boolean localOpResult = false;
prepareMsg = this.sendPrepareMessage(message);
if (prepareMsg != null) {
handler = prepareMsg.getReceiptHandle();
prepareMsg.setMessageBody(message.getMessageBody());
} else {
return prepareMsg;
}
// write operation log to op queue before do transaction.
opLogMessage = this.sendOpLogMessage(handler);
//do local transaction operation.
try {
localOpResult = operations.doTransaction(prepareMsg);
} catch (Exception e) {
log.error("exception occurs when do transaction with message:"
+ prepareMsg.getMessageBody() + ", message handler is:"
+ prepareMsg.getReceiptHandle());
localOpResult = false;
}
if (localOpResult) {
//commit message, it will retry 3 times by default if it was fail.
this.commitMessage(handler);
} else {
this.rollbackMessage(handler);
prepareMsg = null;
}
// confirm the operation log message.
this.confirmOpLogMessage(opLogMessage);
return prepareMsg;
}