From 3b04af96e4ebc246cebe3314771098b1adb71146 Mon Sep 17 00:00:00 2001
From: byteblogs168 <598092184@qq.com>
Date: Sat, 14 Jan 2023 20:48:11 +0800
Subject: [PATCH] =?UTF-8?q?0.0.4.1=20=E6=96=B0=E5=A2=9Efeign=20=E8=AF=B7?=
=?UTF-8?q?=E6=B1=82=E5=A4=B4=E4=BC=A0=E9=80=92=E5=92=8Cresponse=20?=
=?UTF-8?q?=E4=BC=A0=E9=80=92?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
example/pom.xml | 6 +++
.../java/com/example/ExampleApplication.java | 3 ++
.../ExampleClientHttpRequestInterceptor.java | 38 +++-----------
.../ExampleFeignRequestInterceptor.java | 25 +++++++++
.../java/com/example/client/DemoClient.java | 17 +++++++
.../java/com/example/client/FeignConfig.java | 51 +++++++++++++++++++
.../example/controller/TestDdlController.java | 44 ++++++++++++++++
.../controller/TestStatusCodeController.java | 47 +++++++++++++++++
.../com/example/ExampleApplicationTests.java | 12 +++++
.../core/client/NettyHttpConnectClient.java | 12 ++++-
.../retry/client/core/init/StartListener.java | 8 +--
.../core/plugin/RequestHeaderPlugins.java | 51 +++++++++++++++++++
.../core/plugin/ResponseHeaderPlugins.java | 32 ++++++++++++
.../core/register/scan/RetryableScanner.java | 15 ++++--
.../client/core/report/ReportHandler.java | 5 +-
.../core/serializer/HessianSerializer.java | 2 +-
.../core/serializer/JacksonSerializer.java | 2 +-
.../common/core/constant/SystemConstants.java | 4 +-
.../common/core/context/SpringContext.java | 3 ++
19 files changed, 329 insertions(+), 48 deletions(-)
create mode 100644 example/src/main/java/com/example/ExampleFeignRequestInterceptor.java
create mode 100644 example/src/main/java/com/example/client/DemoClient.java
create mode 100644 example/src/main/java/com/example/client/FeignConfig.java
create mode 100644 example/src/main/java/com/example/controller/TestDdlController.java
create mode 100644 example/src/main/java/com/example/controller/TestStatusCodeController.java
create mode 100644 x-retry-client-core/src/main/java/com/x/retry/client/core/plugin/RequestHeaderPlugins.java
create mode 100644 x-retry-client-core/src/main/java/com/x/retry/client/core/plugin/ResponseHeaderPlugins.java
diff --git a/example/pom.xml b/example/pom.xml
index de13010a..6ddbd286 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -71,6 +71,12 @@
okhttp
4.2.0
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+ 3.0.3
+
diff --git a/example/src/main/java/com/example/ExampleApplication.java b/example/src/main/java/com/example/ExampleApplication.java
index 88e5592e..15a6fd06 100644
--- a/example/src/main/java/com/example/ExampleApplication.java
+++ b/example/src/main/java/com/example/ExampleApplication.java
@@ -5,10 +5,13 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
+//import org.springframework.cloud.netflix.feign.EnableFeignClients;
+import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
+@EnableFeignClients(basePackages = "com.example.client")
@EnableXRetry(group = "example_group")
@EnableAspectJAutoProxy
@EnableTransactionManagement
diff --git a/example/src/main/java/com/example/ExampleClientHttpRequestInterceptor.java b/example/src/main/java/com/example/ExampleClientHttpRequestInterceptor.java
index ab9593f1..c0eae99c 100644
--- a/example/src/main/java/com/example/ExampleClientHttpRequestInterceptor.java
+++ b/example/src/main/java/com/example/ExampleClientHttpRequestInterceptor.java
@@ -1,11 +1,7 @@
package com.example;
-import com.x.retry.client.core.exception.XRetryClientException;
-import com.x.retry.client.core.intercepter.RetrySiteSnapshot;
-import com.x.retry.common.core.constant.SystemConstants;
-import com.x.retry.common.core.log.LogUtils;
-import com.x.retry.common.core.model.XRetryHeaders;
-import com.x.retry.common.core.util.JsonUtil;
+import com.x.retry.client.core.plugin.RequestHeaderPlugins;
+import com.x.retry.client.core.plugin.ResponseHeaderPlugins;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
@@ -13,8 +9,7 @@ import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import java.io.IOException;
-import java.util.List;
-import java.util.Objects;
+import java.util.Map;
/**
* RestTemplate 拦截器
@@ -37,33 +32,14 @@ public class ExampleClientHttpRequestInterceptor implements ClientHttpRequestInt
}
private void after(ClientHttpResponse execute) {
-
- HttpHeaders headers = execute.getHeaders();
-
- // 获取不重试标志
- if (headers.containsKey(SystemConstants.X_RETRY_STATUS_CODE_KEY)) {
- List statusCode = headers.get(SystemConstants.X_RETRY_STATUS_CODE_KEY);
- RetrySiteSnapshot.setRetryStatusCode(statusCode.get(0));
- }
+ ResponseHeaderPlugins.responseHeader(execute.getHeaders());
}
private void before(HttpRequest request) {
- XRetryHeaders retryHeader = RetrySiteSnapshot.getRetryHeader();
+ Map header = RequestHeaderPlugins.requestHeader();
+ HttpHeaders headers = request.getHeaders();
+ header.forEach((key, value) -> headers.add(key, value));
- // 传递请求头
- if (Objects.nonNull(retryHeader)) {
- long callRemoteTime = System.currentTimeMillis();
- long entryMethodTime = RetrySiteSnapshot.getEntryMethodTime();
- long transmitTime = retryHeader.getDdl() - (callRemoteTime - entryMethodTime);
- LogUtils.info("RPC传递header头 entryMethodTime:[{}] - callRemoteTime:[{}] = transmitTime:[{}]", entryMethodTime, callRemoteTime, transmitTime);
- if (transmitTime > 0) {
- retryHeader.setDdl(transmitTime);
- } else {
- throw new XRetryClientException("调用链超时, 不在继续调用后面请求");
- }
-
- request.getHeaders().add(SystemConstants.X_RETRY_HEAD_KEY, JsonUtil.toJsonString(retryHeader));
- }
}
}
diff --git a/example/src/main/java/com/example/ExampleFeignRequestInterceptor.java b/example/src/main/java/com/example/ExampleFeignRequestInterceptor.java
new file mode 100644
index 00000000..77b26591
--- /dev/null
+++ b/example/src/main/java/com/example/ExampleFeignRequestInterceptor.java
@@ -0,0 +1,25 @@
+package com.example;
+
+import com.x.retry.client.core.plugin.RequestHeaderPlugins;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @author: www.byteblogs.com
+ * @date : 2022-05-16 15:05
+ */
+@Component
+public class ExampleFeignRequestInterceptor implements RequestInterceptor {
+
+ @Override
+ public void apply(RequestTemplate requestTemplate) {
+
+ Map header = RequestHeaderPlugins.requestHeader();
+ header.forEach((key, value) -> requestTemplate.header(key, value));
+
+ }
+
+}
diff --git a/example/src/main/java/com/example/client/DemoClient.java b/example/src/main/java/com/example/client/DemoClient.java
new file mode 100644
index 00000000..89c78785
--- /dev/null
+++ b/example/src/main/java/com/example/client/DemoClient.java
@@ -0,0 +1,17 @@
+package com.example.client;
+
+//import org.springframework.cloud.netflix.feign.FeignClient;
+import com.x.retry.common.core.model.Result;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+/**
+ * @author: www.byteblogs.com
+ * @date : 2022-05-16 15:32
+ */
+@FeignClient(name = "daemoClient", url = "http://127.0.0.1:8089")
+public interface DemoClient {
+
+ @GetMapping("/school/id")
+ Result get();
+}
diff --git a/example/src/main/java/com/example/client/FeignConfig.java b/example/src/main/java/com/example/client/FeignConfig.java
new file mode 100644
index 00000000..e80b55cb
--- /dev/null
+++ b/example/src/main/java/com/example/client/FeignConfig.java
@@ -0,0 +1,51 @@
+package com.example.client;
+
+import com.x.retry.client.core.plugin.ResponseHeaderPlugins;
+import feign.FeignException;
+import feign.Response;
+import feign.codec.DecodeException;
+import feign.codec.Decoder;
+import feign.codec.StringDecoder;
+import org.springframework.beans.factory.ObjectFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.cloud.openfeign.support.SpringDecoder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author: www.byteblogs.com
+ * @date : 2022-05-17 08:03
+ */
+@Configuration
+public class FeignConfig {
+
+ @Bean
+ public Decoder decoder(@Autowired HttpMessageConverters httpMessageConverters) {
+
+ ObjectFactory objectFactory = () -> httpMessageConverters;
+
+ return new SpringDecoder(objectFactory) {
+ @Override
+ public Object decode(Response response, Type type) throws IOException, DecodeException, FeignException {
+
+ Map> headers = response.headers();
+
+ Map> header = new HashMap<>();
+ headers.forEach((key, value)-> {
+ header.put(key, (List) value);
+ });
+
+ ResponseHeaderPlugins.responseHeader(header);
+ return super.decode(response, type);
+ }
+ };
+ }
+}
diff --git a/example/src/main/java/com/example/controller/TestDdlController.java b/example/src/main/java/com/example/controller/TestDdlController.java
new file mode 100644
index 00000000..461eab1b
--- /dev/null
+++ b/example/src/main/java/com/example/controller/TestDdlController.java
@@ -0,0 +1,44 @@
+package com.example.controller;
+
+import com.example.client.DemoClient;
+import com.x.retry.common.core.model.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @author: www.byteblogs.com
+ * @date : 2022-05-19 08:21
+ */
+@RequestMapping("/ddl")
+@RestController
+public class TestDdlController {
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+ @Autowired
+ private DemoClient demoClient;
+
+ @GetMapping("rest-template")
+ public Result testDDL() {
+ Result result = restTemplate.getForObject("http://127.0.0.1:8088/school/id", Result.class);
+
+ if (result.getStatus() == 0) {
+ throw new UnsupportedOperationException(result.getMessage());
+ }
+ return result;
+ }
+
+ @GetMapping("test-feign")
+ public Result feign() {
+ Result result = demoClient.get();
+ if (result.getStatus() == 0) {
+ throw new UnsupportedOperationException(result.getMessage());
+ }
+ return result;
+
+ }
+}
diff --git a/example/src/main/java/com/example/controller/TestStatusCodeController.java b/example/src/main/java/com/example/controller/TestStatusCodeController.java
new file mode 100644
index 00000000..af8ee1e1
--- /dev/null
+++ b/example/src/main/java/com/example/controller/TestStatusCodeController.java
@@ -0,0 +1,47 @@
+package com.example.controller;
+
+import com.example.client.DemoClient;
+import com.x.retry.client.core.annotation.Retryable;
+import com.x.retry.common.core.model.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @author: www.byteblogs.com
+ * @date : 2022-05-19 08:24
+ */
+@RequestMapping("/status-code")
+@RestController
+public class TestStatusCodeController {
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+ @Autowired
+ private DemoClient demoClient;
+
+ @GetMapping("rest-template")
+ @Retryable(scene = "testRestTemplateStatusCode")
+ public Result testRestTemplateStatusCode() {
+ Result result = restTemplate.getForObject("http://127.0.0.1:8088/school/id", Result.class);
+
+ if (result.getStatus() == 0) {
+ throw new UnsupportedOperationException(result.getMessage());
+ }
+ return result;
+ }
+
+ @GetMapping("feign")
+ @Retryable(scene = "testFeignStatusCode")
+ public Result testFeignStatusCode() {
+ Result result = demoClient.get();
+
+ if (result.getStatus() == 0) {
+ throw new UnsupportedOperationException(result.getMessage());
+ }
+ return result;
+ }
+}
diff --git a/example/src/test/java/com/example/ExampleApplicationTests.java b/example/src/test/java/com/example/ExampleApplicationTests.java
index 7f00934c..559e44ea 100644
--- a/example/src/test/java/com/example/ExampleApplicationTests.java
+++ b/example/src/test/java/com/example/ExampleApplicationTests.java
@@ -1,7 +1,10 @@
package com.example;
+//import com.example.client.DemoClient;
+import com.example.client.DemoClient;
import com.example.mapper.SchoolMapper;
import com.example.po.School;
+import com.x.retry.common.core.model.Result;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -18,6 +21,15 @@ public class ExampleApplicationTests {
@Autowired
private RestTemplate restTemplate;
+ @Autowired(required = false)
+ private DemoClient demoClient;
+
+ @Test
+ public void demoClient() {
+ Result s = demoClient.get();
+ System.out.println(s);
+ }
+
@Test
public void test() {
School school = new School();
diff --git a/x-retry-client-core/src/main/java/com/x/retry/client/core/client/NettyHttpConnectClient.java b/x-retry-client-core/src/main/java/com/x/retry/client/core/client/NettyHttpConnectClient.java
index 802b247a..306911ed 100644
--- a/x-retry-client-core/src/main/java/com/x/retry/client/core/client/NettyHttpConnectClient.java
+++ b/x-retry-client-core/src/main/java/com/x/retry/client/core/client/NettyHttpConnectClient.java
@@ -17,6 +17,9 @@ import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.http.*;
import io.netty.handler.timeout.IdleStateHandler;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.Environment;
@@ -34,11 +37,12 @@ import java.util.concurrent.TimeUnit;
@Slf4j
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
-public class NettyHttpConnectClient implements Lifecycle {
+public class NettyHttpConnectClient implements Lifecycle, ApplicationContextAware {
private static final String HOST_ID = IdUtil.simpleUUID();
private static final String HOST_IP = HostUtils.getIp();
+ private ApplicationContext applicationContext;
private static Channel channel;
private static NioEventLoopGroup nioEventLoopGroup = new NioEventLoopGroup();
private static Bootstrap bootstrap = new Bootstrap();
@@ -46,7 +50,7 @@ public class NettyHttpConnectClient implements Lifecycle {
public void start() {
try {
- XRetryProperties xRetryProperties = SpringContext.getBeanByType(XRetryProperties.class);
+ XRetryProperties xRetryProperties = applicationContext.getBean(XRetryProperties.class);
XRetryProperties.ServerConfig server = xRetryProperties.getServer();
final NettyHttpConnectClient thisClient = this;
bootstrap.group(nioEventLoopGroup)
@@ -116,4 +120,8 @@ public class NettyHttpConnectClient implements Lifecycle {
}
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ this.applicationContext = applicationContext;
+ }
}
diff --git a/x-retry-client-core/src/main/java/com/x/retry/client/core/init/StartListener.java b/x-retry-client-core/src/main/java/com/x/retry/client/core/init/StartListener.java
index f3eb17b5..0f9c3625 100644
--- a/x-retry-client-core/src/main/java/com/x/retry/client/core/init/StartListener.java
+++ b/x-retry-client-core/src/main/java/com/x/retry/client/core/init/StartListener.java
@@ -3,8 +3,8 @@ package com.x.retry.client.core.init;
import com.x.retry.client.core.Lifecycle;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.event.ContextRefreshedEvent;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.List;
@@ -17,13 +17,13 @@ import java.util.List;
*/
@Component
@Slf4j
-public class StartListener implements ApplicationListener {
+public class StartListener implements ApplicationRunner {
@Autowired
private List lifecycleList;
@Override
- public void onApplicationEvent(ContextRefreshedEvent event) {
+ public void run(ApplicationArguments args) throws Exception {
log.info("X-RETRY-CLIENT-RETRY 启动");
lifecycleList.forEach(Lifecycle::start);
log.info("X-RETRY-CLIENT-RETRY 启动成功");
diff --git a/x-retry-client-core/src/main/java/com/x/retry/client/core/plugin/RequestHeaderPlugins.java b/x-retry-client-core/src/main/java/com/x/retry/client/core/plugin/RequestHeaderPlugins.java
new file mode 100644
index 00000000..f5c3c52a
--- /dev/null
+++ b/x-retry-client-core/src/main/java/com/x/retry/client/core/plugin/RequestHeaderPlugins.java
@@ -0,0 +1,51 @@
+package com.x.retry.client.core.plugin;
+
+import com.x.retry.client.core.exception.XRetryClientException;
+import com.x.retry.client.core.intercepter.RetrySiteSnapshot;
+import com.x.retry.common.core.constant.SystemConstants;
+import com.x.retry.common.core.log.LogUtils;
+import com.x.retry.common.core.model.XRetryHeaders;
+import com.x.retry.common.core.util.JsonUtil;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @author: www.byteblogs.com
+ * @date : 2022-05-17 09:01
+ */
+public class RequestHeaderPlugins {
+
+ private RequestHeaderPlugins() {
+ }
+
+ /**
+ * 请求头传递
+ *
+ * @return 头信息
+ */
+ public static Map requestHeader() {
+
+ Map header = new HashMap<>();
+ XRetryHeaders retryHeader = RetrySiteSnapshot.getRetryHeader();
+
+ // 传递请求头
+ if (Objects.nonNull(retryHeader)) {
+ long callRemoteTime = System.currentTimeMillis();
+ long entryMethodTime = RetrySiteSnapshot.getEntryMethodTime();
+ long transmitTime = retryHeader.getDdl() - (callRemoteTime - entryMethodTime);
+ LogUtils.info("RPC传递header头 entryMethodTime:[{}] - callRemoteTime:[{}] = transmitTime:[{}]", entryMethodTime, callRemoteTime, transmitTime);
+ if (transmitTime > 0) {
+ retryHeader.setDdl(transmitTime);
+ } else {
+ throw new XRetryClientException("调用链超时, 不在继续调用后面请求");
+ }
+
+ header.put(SystemConstants.X_RETRY_HEAD_KEY, JsonUtil.toJsonString(retryHeader));
+ }
+
+ return header;
+ }
+
+}
diff --git a/x-retry-client-core/src/main/java/com/x/retry/client/core/plugin/ResponseHeaderPlugins.java b/x-retry-client-core/src/main/java/com/x/retry/client/core/plugin/ResponseHeaderPlugins.java
new file mode 100644
index 00000000..ffd712e5
--- /dev/null
+++ b/x-retry-client-core/src/main/java/com/x/retry/client/core/plugin/ResponseHeaderPlugins.java
@@ -0,0 +1,32 @@
+package com.x.retry.client.core.plugin;
+
+import com.x.retry.client.core.intercepter.RetrySiteSnapshot;
+import com.x.retry.common.core.constant.SystemConstants;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author: www.byteblogs.com
+ * @date : 2022-05-17 09:01
+ */
+public class ResponseHeaderPlugins {
+
+ private ResponseHeaderPlugins() {
+ }
+
+ /**
+ * 获取接口返回的响应头
+ *
+ * @param header 响应头
+ */
+ public static void responseHeader(Map> header) {
+
+ // 获取不重试标志
+ if (header.containsKey(SystemConstants.X_RETRY_STATUS_CODE_KEY)) {
+ List statusCode = header.get(SystemConstants.X_RETRY_STATUS_CODE_KEY);
+ RetrySiteSnapshot.setRetryStatusCode(statusCode.get(0));
+ }
+ }
+
+}
diff --git a/x-retry-client-core/src/main/java/com/x/retry/client/core/register/scan/RetryableScanner.java b/x-retry-client-core/src/main/java/com/x/retry/client/core/register/scan/RetryableScanner.java
index 29e0fdc2..2829e008 100644
--- a/x-retry-client-core/src/main/java/com/x/retry/client/core/register/scan/RetryableScanner.java
+++ b/x-retry-client-core/src/main/java/com/x/retry/client/core/register/scan/RetryableScanner.java
@@ -9,6 +9,9 @@ import com.x.retry.client.core.strategy.RetryMethod;
import com.x.retry.common.core.context.SpringContext;
import com.x.retry.common.core.log.LogUtils;
import org.springframework.aop.support.AopUtils;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
import org.springframework.core.MethodIntrospector;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.stereotype.Component;
@@ -21,7 +24,9 @@ import java.util.*;
* @date : 2022-03-03 16:55
*/
@Component
-public class RetryableScanner implements Scanner {
+public class RetryableScanner implements Scanner, ApplicationContextAware {
+
+ public ApplicationContext applicationContext;
@Override
public List doScan() {
@@ -31,9 +36,9 @@ public class RetryableScanner implements Scanner {
private List scanRetryAbleMethod() {
List retryerInfoList = new ArrayList<>();
- String[] beanDefinitionNames = SpringContext.applicationContext.getBeanNamesForType(Object.class, false, true);
+ String[] beanDefinitionNames = applicationContext.getBeanNamesForType(Object.class, false, true);
for (String beanDefinitionName : beanDefinitionNames) {
- Object bean = SpringContext.applicationContext.getBean(beanDefinitionName);
+ Object bean = applicationContext.getBean(beanDefinitionName);
Map annotatedMethods = null;
try {
@@ -87,4 +92,8 @@ public class RetryableScanner implements Scanner {
);
}
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ this.applicationContext = applicationContext;
+ }
}
diff --git a/x-retry-client-core/src/main/java/com/x/retry/client/core/report/ReportHandler.java b/x-retry-client-core/src/main/java/com/x/retry/client/core/report/ReportHandler.java
index b3fde12c..5522411a 100644
--- a/x-retry-client-core/src/main/java/com/x/retry/client/core/report/ReportHandler.java
+++ b/x-retry-client-core/src/main/java/com/x/retry/client/core/report/ReportHandler.java
@@ -31,12 +31,9 @@ import java.util.function.Function;
public class ReportHandler implements Lifecycle {
@Autowired
- @Qualifier("jacksonSerializer")
+ @Qualifier("XRetryJacksonSerializer")
private RetryArgSerializer retryArgSerializer;
- @Autowired
- private XRetryProperties xRetryProperties;
-
private static SlidingWindow slidingWindow;
/**
diff --git a/x-retry-client-core/src/main/java/com/x/retry/client/core/serializer/HessianSerializer.java b/x-retry-client-core/src/main/java/com/x/retry/client/core/serializer/HessianSerializer.java
index 37c3e797..8d7d51fd 100644
--- a/x-retry-client-core/src/main/java/com/x/retry/client/core/serializer/HessianSerializer.java
+++ b/x-retry-client-core/src/main/java/com/x/retry/client/core/serializer/HessianSerializer.java
@@ -19,7 +19,7 @@ import java.util.Objects;
* @date : 2022-03-07 15:08
* @date 2022/1/5 11:14 上午
*/
-@Component
+@Component("XRetryHessianSerializer")
public class HessianSerializer implements RetryArgSerializer {
@Override
diff --git a/x-retry-client-core/src/main/java/com/x/retry/client/core/serializer/JacksonSerializer.java b/x-retry-client-core/src/main/java/com/x/retry/client/core/serializer/JacksonSerializer.java
index e22b153d..322b4d74 100644
--- a/x-retry-client-core/src/main/java/com/x/retry/client/core/serializer/JacksonSerializer.java
+++ b/x-retry-client-core/src/main/java/com/x/retry/client/core/serializer/JacksonSerializer.java
@@ -14,7 +14,7 @@ import java.lang.reflect.Type;
* @author: www.byteblogs.com
* @date : 2022-03-07 15:08
*/
-@Component
+@Component("XRetryJacksonSerializer")
public class JacksonSerializer implements RetryArgSerializer {
@Override
diff --git a/x-retry-common/x-retry-common-core/src/main/java/com/x/retry/common/core/constant/SystemConstants.java b/x-retry-common/x-retry-common-core/src/main/java/com/x/retry/common/core/constant/SystemConstants.java
index 3404ffb0..0a4de59b 100644
--- a/x-retry-common/x-retry-common-core/src/main/java/com/x/retry/common/core/constant/SystemConstants.java
+++ b/x-retry-common/x-retry-common-core/src/main/java/com/x/retry/common/core/constant/SystemConstants.java
@@ -9,12 +9,12 @@ public class SystemConstants {
/**
* 请求头 key
*/
- public static final String X_RETRY_HEAD_KEY = "X-RETRY";
+ public static final String X_RETRY_HEAD_KEY = "x-retry";
/**
* 异常重试码 key
*/
- public static final String X_RETRY_STATUS_CODE_KEY = "X-RETRY-STATUS";
+ public static final String X_RETRY_STATUS_CODE_KEY = "x-retry-status";
/**
* 异常重试码
diff --git a/x-retry-common/x-retry-common-core/src/main/java/com/x/retry/common/core/context/SpringContext.java b/x-retry-common/x-retry-common-core/src/main/java/com/x/retry/common/core/context/SpringContext.java
index 919dc2a4..1f266a4f 100644
--- a/x-retry-common/x-retry-common-core/src/main/java/com/x/retry/common/core/context/SpringContext.java
+++ b/x-retry-common/x-retry-common-core/src/main/java/com/x/retry/common/core/context/SpringContext.java
@@ -4,6 +4,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
@@ -11,6 +13,7 @@ import org.springframework.stereotype.Component;
* @date : 2022-02-16 18:03
*/
@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
@Slf4j
public class SpringContext implements ApplicationContextAware {