From 44ba9c744bae5d53ac2877da10d01e7f8b16823d Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Sat, 29 Jul 2023 12:09:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=202.1.0=201.=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E5=92=8C=E8=B6=85=E6=97=B6=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/proxy/ClientInvokeHandler.java | 13 ++++++- .../EasyRetryClientTimeOutException.java | 38 +++++++++++++++++++ .../strategy/AbstractRetryStrategies.java | 4 +- .../core/strategy/LocalRetryStrategies.java | 8 ++-- 4 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/exception/EasyRetryClientTimeOutException.java diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/client/proxy/ClientInvokeHandler.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/client/proxy/ClientInvokeHandler.java index 346126b5..c1e92a3d 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/client/proxy/ClientInvokeHandler.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/client/proxy/ClientInvokeHandler.java @@ -6,6 +6,7 @@ import com.aizuda.easy.retry.client.core.annotation.Mapping; import com.aizuda.easy.retry.client.core.client.netty.NettyChannel; import com.aizuda.easy.retry.client.core.client.netty.RpcContext; import com.aizuda.easy.retry.client.core.exception.EasyRetryClientException; +import com.aizuda.easy.retry.client.core.exception.EasyRetryClientTimeOutException; import com.aizuda.easy.retry.common.core.log.LogUtils; import com.aizuda.easy.retry.common.core.model.EasyRetryRequest; import com.aizuda.easy.retry.common.core.util.JsonUtil; @@ -15,7 +16,9 @@ import lombok.extern.slf4j.Slf4j; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.function.Consumer; /** @@ -41,7 +44,7 @@ public class ClientInvokeHandler implements InvocationHandler { } @Override - public R invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { + public R invoke(final Object proxy, final Method method, final Object[] args) throws InterruptedException { StopWatch sw = new StopWatch(); Mapping annotation = method.getAnnotation(Mapping.class); EasyRetryRequest easyRetryRequest = new EasyRetryRequest(args); @@ -67,7 +70,13 @@ public class ClientInvokeHandler implements InvocationHandler { return null; } else { Assert.notNull(completableFuture, () -> new EasyRetryClientException("completableFuture is null")); - return completableFuture.get(timeout, unit); + try { + return completableFuture.get(timeout, unit); + } catch (ExecutionException e) { + throw new EasyRetryClientException("Request to remote interface exception. path:[{}]", annotation.path()); + } catch (TimeoutException e) { + throw new EasyRetryClientTimeOutException("Request to remote interface timed out. path:[{}]", annotation.path()); + } } } diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/exception/EasyRetryClientTimeOutException.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/exception/EasyRetryClientTimeOutException.java new file mode 100644 index 00000000..7b0f62e1 --- /dev/null +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/exception/EasyRetryClientTimeOutException.java @@ -0,0 +1,38 @@ +package com.aizuda.easy.retry.client.core.exception; + +import com.aizuda.easy.retry.common.core.exception.BaseEasyRetryException; + +/** + * @author: www.byteblogs.com + * @date : 2022-03-03 14:49 + */ +public class EasyRetryClientTimeOutException extends BaseEasyRetryException { + + public EasyRetryClientTimeOutException(String message) { + super(message); + } + + public EasyRetryClientTimeOutException(String message, Throwable cause) { + super(message, cause); + } + + public EasyRetryClientTimeOutException(Throwable cause) { + super(cause); + } + + public EasyRetryClientTimeOutException(String message, Object... arguments) { + super(message, arguments); + } + + public EasyRetryClientTimeOutException(String message, Object[] arguments, Throwable cause) { + super(message, arguments, cause); + } + + public EasyRetryClientTimeOutException(String message, Object argument, Throwable cause) { + super(message, argument, cause); + } + + public EasyRetryClientTimeOutException(String message, Object argument) { + super(message, argument); + } +} diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java index 9c8fb507..7042386d 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java @@ -64,9 +64,9 @@ public abstract class AbstractRetryStrategies implements RetryStrategy { retryerResultContext.setResult(result); } catch (Exception e) { - log.error("重试执行非预期异常", e); + log.error("重试期间发生非预期异常, sceneName:[{}] executorClassName:[{}]", sceneName, executorClassName, e); retryerResultContext.setMessage("非预期异常" + e.getMessage()); - // 本地重试状态未失败 远程重试状态为成功 + // 本地重试状态为失败 远程重试状态为成功 unexpectedError(e, retryerResultContext); } diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/LocalRetryStrategies.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/LocalRetryStrategies.java index e9d1eb6c..ce7fb2b7 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/LocalRetryStrategies.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/LocalRetryStrategies.java @@ -120,11 +120,9 @@ public class LocalRetryStrategies extends AbstractRetryStrategies { case ONLY_REMOTE: // 仅仅是远程重试则直接上报 log.debug("上报 scene:[{}]", retryerInfo.getScene()); - return () -> { - doReport(retryerInfo, params); - RetrySiteSnapshot.setStage(RetrySiteSnapshot.EnumStage.REMOTE.getStage()); - return null; - }; + doReport(retryerInfo, params); + RetrySiteSnapshot.setStage(RetrySiteSnapshot.EnumStage.REMOTE.getStage()); + return () -> null; default: throw new EasyRetryClientException("异常重试模式 [{}]", retryType.name()); }