补偿方法回调数据:
public class RollbackCall {
private Object instanct;
private String method;
private Class<?> paramTypes[];
private Object paramObjects[];
}
分布式Service方法:
Stack<RollbackCall> rollbackStack = new Stack<>();
RollbackCall rollbackCall = null;
// 分布式db外部api调用
xxxApiService.insert(objX);
// -> 失败补偿方法为delete(objX);
rollbackCall = new RollbackCall();
rollbackCall.setInstance(xxxApiService);
rollbackCall.setMethod("delete");
rollbackCall.setParamTypes(new Class<?>[] { ObjX.class });
rollbackCall.setParamObjects(new Object[] { objX });
rollbackStack.push(rollbackCall);
// 分布式db外部api调用
try {
yyyApiService.insert(objY)
} catch {
Rollback(rollbackStack);
}
// -> 失败补偿方法为delete(objY);
事务回滚方法:
private void Rollback(Stack<RollbackCall> rollbackStack) {
log.info("rollback begin.");
w