@Override public void apply(final RequestTemplate requestTemplate) { requestTemplate.header(CommonConstant.TX_TRANSACTION_GROUP, TxTransactionLocal.getInstance().getTxGroupId()); }
@Override public ClientHttpResponse intercept(final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) throws IOException { request.getHeaders().add(CommonConstant.TX_TRANSACTION_GROUP, TxTransactionLocal.getInstance().getTxGroupId()); return execution.execute(request, body); } }
@Override public Response filter(final Caller<?> caller, final Request request) { request.setAttachment(CommonConstant.TX_TRANSACTION_GROUP, TxTransactionLocal.getInstance().getTxGroupId()); return caller.call(request); } }
@Override public Result invoke(final Invoker<?> invoker, final Invocation invocation) throws RpcException { if (RpcContext.getContext().isConsumerSide()) { RpcContext.getContext().setAttachment(CommonConstant.TX_TRANSACTION_GROUP, TxTransactionLocal.getInstance().getTxGroupId()); } return invoker.invoke(invocation); } }
/** * 补偿的时候,不走分布式事务处理. * * @param point point 切点 * @param info 信息 * @return Object * @throws Throwable ex */ @Override public Object handler(final ProceedingJoinPoint point, final TxTransactionInfo info) throws Throwable { TxTransactionLocal.getInstance().setTxGroupId(CommonConstant.COMPENSATE_ID); PlatformTransactionManager platformTransactionManager = TransactionManagerHelper.getTransactionManager(info.getTransactionManager()); DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); TransactionStatus transactionStatus = platformTransactionManager.getTransaction(def); try { final Object proceed = point.proceed(); platformTransactionManager.commit(transactionStatus); return proceed; } catch (Throwable e) { platformTransactionManager.rollback(transactionStatus); throw e; } finally { TxTransactionLocal.getInstance().removeTxGroupId(); CompensationLocal.getInstance().removeCompensationId(); } } }
TxTransactionLocal.getInstance().setTxGroupId(groupId); throw throwable; } finally { TxTransactionLocal.getInstance().removeTxGroupId();
final String taskKey = IdWorkerUtils.getInstance().createTaskKey(); final BlockTask task = BlockTaskHelper.getInstance().getTask(taskKey); TxTransactionLocal.getInstance().setTxGroupId(info.getTxGroupId()); txTransactionThreadPool .newFixedThreadPool() .execute(() -> { TxTransactionLocal.getInstance().setTxGroupId(info.getTxGroupId()); final String waitKey = IdWorkerUtils.getInstance().createTaskKey();