From 093ba52904980f46c9f8e438b4d9354306a144a8 Mon Sep 17 00:00:00 2001 From: wgy Date: Tue, 13 Nov 2018 19:17:29 +0800 Subject: [PATCH 1/2] =?UTF-8?q?springCloud=E4=B8=AD=E7=9A=84RestTemplateCo?= =?UTF-8?q?nfiguration=E8=87=AA=E5=AE=9A=E4=B9=89Feign.Builder=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=E4=B8=8E=E5=BC=80=E5=90=AFhystrix=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feign/RestTemplateConfiguration.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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()); + + } + }; } + } From cde95ff94cdf3c897d886c74ddb1d3f69d07b5dc Mon Sep 17 00:00:00 2001 From: wgy Date: Tue, 13 Nov 2018 19:18:54 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BA=8B=E5=8A=A1?= =?UTF-8?q?=E5=8F=82=E4=B8=8E=E8=80=85=E4=B8=ADRequestContextHolder.getReq?= =?UTF-8?q?uestAttributes()=E4=B8=BAnull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- raincat-core/pom.xml | 4 ++++ .../core/service/handler/ActorTxTransactionHandler.java | 6 ++++++ 2 files changed, 10 insertions(+) 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();