У меня есть два API-интерфейса restful: одно имя заказа на обновление и другое состояние заказа на обновление, и они используют одну и ту же базу данных mysql и одну и ту же таблицу под названием «Order».
И в моем клиентском коде я хочу вызвать эти два API с транзакцией, но я обнаружил, что не могу управлять одним xid в двух сеансах mysql.
И мой дизайн такой:
код клиента:
api.xa_start(xid);
if (api.updateName('111') && api.updateStatus(1)) {
api.xa_commit(xid);
} else {
api.xa_rollback(xid);
}
API-код (который находится на другом сервере):
function xa_start(xid) {
pdo.execute('xa start xid');
}
function xa_commit(xid) {
pdo.execute('xa commit xid');
}
function xa_rollback(xid) {
pdo.execute('xa rollback xid');
}
function updateName(name) {
pdo.execute('update order set name="'+name+'" where id=xx');
}
function updatestatus(status) {
pdo.execute('update order set status="'+status+'" where id=xx');
}
Но проблема в том, что MySQL кажется, что не может использовать один и тот же XID в двух сессиях … Так, как я могу решить эту проблему …
Задача ещё не решена.
Других решений пока нет …