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());
+
+ }
+ };
}
+
}