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 {