diff --git a/raincat-core/pom.xml b/raincat-core/pom.xml index 7b0102d4..ac407351 100644 --- a/raincat-core/pom.xml +++ b/raincat-core/pom.xml @@ -100,6 +100,10 @@ commons-codec commons-codec + + org.springframework + spring-web + diff --git a/raincat-core/src/main/java/com/raincat/core/service/handler/ActorTxTransactionHandler.java b/raincat-core/src/main/java/com/raincat/core/service/handler/ActorTxTransactionHandler.java index 10ffb4e8..88fff95a 100644 --- a/raincat-core/src/main/java/com/raincat/core/service/handler/ActorTxTransactionHandler.java +++ b/raincat-core/src/main/java/com/raincat/core/service/handler/ActorTxTransactionHandler.java @@ -28,6 +28,7 @@ import com.raincat.core.compensation.command.TxCompensationCommand; import com.raincat.core.concurrent.task.BlockTask; import com.raincat.core.concurrent.task.BlockTaskHelper; +import com.raincat.core.concurrent.threadlocal.TxTransactionLocal; import com.raincat.core.concurrent.threadpool.TransactionThreadPool; import com.raincat.core.service.TxManagerMessageService; import com.raincat.core.service.TxTransactionHandler; @@ -40,6 +41,8 @@ import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ScheduledFuture; @@ -77,10 +80,13 @@ public Object handler(ProceedingJoinPoint point, TxTransactionInfo info) throws LogUtil.info(LOGGER, "分布式事务参与方,开始执行,事务组id:{}", info::getTxGroupId); final String taskKey = IdWorkerUtils.getInstance().createTaskKey(); final BlockTask task = BlockTaskHelper.getInstance().getTask(taskKey); + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); transactionThreadPool .newFixedThreadPool() .execute(() -> { + TxTransactionLocal.getInstance().setTxGroupId(info.getTxGroupId()); + RequestContextHolder.setRequestAttributes(requestAttributes); final String waitKey = IdWorkerUtils.getInstance().createTaskKey(); final BlockTask waitTask = BlockTaskHelper.getInstance().getTask(waitKey); DefaultTransactionDefinition def = new DefaultTransactionDefinition(); diff --git a/raincat-springcloud/src/main/java/com/raincat/springcloud/feign/RestTemplateConfiguration.java b/raincat-springcloud/src/main/java/com/raincat/springcloud/feign/RestTemplateConfiguration.java index fdb41db6..ab9d3ff3 100644 --- a/raincat-springcloud/src/main/java/com/raincat/springcloud/feign/RestTemplateConfiguration.java +++ b/raincat-springcloud/src/main/java/com/raincat/springcloud/feign/RestTemplateConfiguration.java @@ -18,7 +18,11 @@ package com.raincat.springcloud.feign; +import com.raincat.common.constant.CommonConstant; +import com.raincat.core.concurrent.threadlocal.TxTransactionLocal; import feign.Feign; +import feign.RequestInterceptor; +import feign.RequestTemplate; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; @@ -28,11 +32,24 @@ */ @Configuration public class RestTemplateConfiguration { - +/* @Bean @Scope("prototype") public Feign.Builder feignBuilder() { return Feign.builder().requestInterceptor(new RestTemplateInterceptor()); + }*/ + + @Bean("txRequestInterceptor") + public RequestInterceptor txRequestInterceptor() { + + return new RequestInterceptor() { + @Override + public void apply(RequestTemplate template) { + template.header(CommonConstant.TX_TRANSACTION_GROUP, TxTransactionLocal.getInstance().getTxGroupId()); + + } + }; } + }