diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/RpcClientInvokeHandler.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/RpcClientInvokeHandler.java index e5679b23c..d298b282e 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/RpcClientInvokeHandler.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/RpcClientInvokeHandler.java @@ -1,6 +1,7 @@ package com.aizuda.easy.retry.server.client; import cn.hutool.core.lang.Assert; +import cn.hutool.core.lang.Tuple; import cn.hutool.core.util.URLUtil; import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.context.SpringContext; @@ -14,6 +15,7 @@ import com.aizuda.easy.retry.server.dto.RegisterNodeInfo; import com.aizuda.easy.retry.server.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.support.cache.CacheRegisterTable; import com.aizuda.easy.retry.server.support.handler.ClientNodeAllocateHandler; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.http.HttpEntity; @@ -87,35 +89,25 @@ public class RpcClientInvokeHandler implements InvocationHandler { private Result requestRemote(Method method, Object[] args, Mapping mapping, int count) { try { - Object body = null; - HttpHeaders requestHeaders = new HttpHeaders(); - Map paramMap = new HashMap<>(); - // 解析参数 - Parameter[] parameters = method.getParameters(); - for (int i = 0; i < parameters.length; i++) { - Parameter parameter = parameters[i]; - if (parameter.isAnnotationPresent(Body.class)) { - body = args[i]; - } else if ((parameter.isAnnotationPresent(Header.class))) { - requestHeaders.add(SystemConstants.EASY_RETRY_HEAD_KEY, JsonUtil.toJsonString(args[i])); - } else if ((parameter.isAnnotationPresent(Param.class))) { - paramMap.put(parameter.getAnnotation(Param.class).name(), args[i]); - } else { - throw new EasyRetryServerException("parameter error"); - } - } + + // 参数解析 + ParseParasResult parasResult = doParseParams(method, args); // 若是POST请求,请求体不能是null if (RequestMethod.POST.name().equals(mapping.method().name())) { - Assert.notNull(body, () -> new EasyRetryServerException("body cannot be null")); + Assert.notNull(parasResult.body, () -> new EasyRetryServerException("body cannot be null")); } - // 拼接 url?a=1&b=1 RestTemplate restTemplate = SpringContext.CONTEXT.getBean(RestTemplate.class); + ResponseEntity response = restTemplate.exchange( - getUrl(mapping, paramMap).toString(), + // 拼接 url?a=1&b=1 + getUrl(mapping, parasResult.paramMap).toString(), + // post or get HttpMethod.valueOf(mapping.method().name()), - new HttpEntity<>(body, requestHeaders), + // body + new HttpEntity<>(parasResult.body, parasResult.requestHeaders), + // 返回值类型 Result.class); log.info("Request client success. count:[{}] hostId:[{}] addr:[{}:{}]", count, hostId, hostIp, hostPort); @@ -167,4 +159,39 @@ public class RpcClientInvokeHandler implements InvocationHandler { return url; } + @NotNull + private ParseParasResult doParseParams(Method method, Object[] args) { + + Object body = null; + HttpHeaders requestHeaders = new HttpHeaders(); + Map paramMap = new HashMap<>(); + // 解析参数 + Parameter[] parameters = method.getParameters(); + for (int i = 0; i < parameters.length; i++) { + Parameter parameter = parameters[i]; + if (parameter.isAnnotationPresent(Body.class)) { + body = args[i]; + } else if ((parameter.isAnnotationPresent(Header.class))) { + requestHeaders.add(SystemConstants.EASY_RETRY_HEAD_KEY, JsonUtil.toJsonString(args[i])); + } else if ((parameter.isAnnotationPresent(Param.class))) { + paramMap.put(parameter.getAnnotation(Param.class).name(), args[i]); + } else { + throw new EasyRetryServerException("parameter error"); + } + } + + ParseParasResult parseParasResult = new ParseParasResult(); + parseParasResult.setBody(body); + parseParasResult.setParamMap(paramMap); + parseParasResult.setRequestHeaders(requestHeaders); + return parseParasResult; + } + + @Data + private static class ParseParasResult { + + Object body = null; + HttpHeaders requestHeaders; + Map paramMap; + } } diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Body.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Body.java index d7e32ba82..526415748 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Body.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Body.java @@ -7,8 +7,11 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * @author: shuguang.zhang + * 请求头信息 + * + * @author: www.byteblogs.com * @date : 2023-06-19 16:02 + * @since 2.0.0 */ @Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Header.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Header.java index e33056ae7..a1bdd04d5 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Header.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Header.java @@ -7,8 +7,11 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * @author: shuguang.zhang + * 请求头信息 + * + * @author: www.byteblogs.com * @date : 2023-06-19 16:02 + * @since 2.0.0 */ @Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Mapping.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Mapping.java index 9110d6d88..5be2311a4 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Mapping.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Mapping.java @@ -13,7 +13,7 @@ import java.lang.annotation.Target; * * @author: www.byteblogs.com * @date : 2023-05-11 22:32 - * @since 1.3.0 + * @since 2.0.0 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Param.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Param.java index 15bd10673..90491bd2b 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Param.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/client/annotation/Param.java @@ -7,8 +7,11 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * @author: shuguang.zhang + * url参数 + * + * @author: www.byteblogs.com * @date : 2023-06-19 16:10 + * @since 2.0.0 */ @Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/dispatch/actor/exec/ExecCallbackUnitActor.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/dispatch/actor/exec/ExecCallbackUnitActor.java index dea29ac19..5259dd2df 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/dispatch/actor/exec/ExecCallbackUnitActor.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/dispatch/actor/exec/ExecCallbackUnitActor.java @@ -41,7 +41,6 @@ import java.util.concurrent.Callable; public class ExecCallbackUnitActor extends AbstractActor { public static final String BEAN_NAME = "ExecCallbackUnitActor"; - public static final String URL = "http://{0}:{1}/{2}/retry/callback/v1"; @Autowired @Qualifier("bitSetIdempotentStrategyHandler")