feat(sj_1.0.0): 优化超时异常
This commit is contained in:
parent
c913337a1a
commit
fe8d4bd347
@ -6,6 +6,7 @@ import com.aizuda.snailjob.client.common.annotation.Mapping;
|
||||
import com.aizuda.snailjob.client.common.exception.SnailJobClientException;
|
||||
import com.aizuda.snailjob.client.common.exception.SnailJobClientTimeOutException;
|
||||
import com.aizuda.snailjob.common.core.enums.StatusEnum;
|
||||
import com.aizuda.snailjob.common.core.exception.SnailJobRemotingTimeOutException;
|
||||
import com.aizuda.snailjob.common.core.model.NettyResult;
|
||||
import com.aizuda.snailjob.common.core.model.Result;
|
||||
import com.aizuda.snailjob.common.core.rpc.RpcContext;
|
||||
@ -44,7 +45,7 @@ public class RpcClientInvokeHandler<R extends Result<Object>> implements Invocat
|
||||
}
|
||||
|
||||
@Override
|
||||
public R invoke(final Object proxy, final Method method, final Object[] args) throws InterruptedException {
|
||||
public R invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
|
||||
StopWatch sw = new StopWatch();
|
||||
Mapping annotation = method.getAnnotation(Mapping.class);
|
||||
SnailJobRequest snailJobRequest = new SnailJobRequest(args);
|
||||
@ -78,7 +79,7 @@ public class RpcClientInvokeHandler<R extends Result<Object>> implements Invocat
|
||||
try {
|
||||
return newFuture.get(Integer.MAX_VALUE, TimeUnit.MILLISECONDS);
|
||||
} catch (ExecutionException e) {
|
||||
throw new SnailJobClientException("Request to remote interface exception. path:[{}]", annotation.path());
|
||||
throw e.getCause();
|
||||
} catch (TimeoutException e) {
|
||||
throw new SnailJobClientTimeOutException("Request to remote interface timed out. path:[{}]", annotation.path());
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert;
|
||||
import com.aizuda.snailjob.common.core.constant.SystemConstants;
|
||||
import com.aizuda.snailjob.common.core.context.SpringContext;
|
||||
import com.aizuda.snailjob.common.core.enums.StatusEnum;
|
||||
import com.aizuda.snailjob.common.core.exception.SnailJobRemotingTimeOutException;
|
||||
import com.aizuda.snailjob.common.core.model.NettyResult;
|
||||
import com.aizuda.snailjob.common.core.model.SnailJobRequest;
|
||||
import com.aizuda.snailjob.common.core.model.Result;
|
||||
@ -171,15 +172,7 @@ public class RpcClientInvokeHandler implements InvocationHandler {
|
||||
return null;
|
||||
} else {
|
||||
Assert.notNull(newFuture, () -> new SnailJobServerException("completableFuture is null"));
|
||||
try {
|
||||
return (Result) newFuture.get(Integer.MAX_VALUE, TimeUnit.MILLISECONDS);
|
||||
} catch (ExecutionException e) {
|
||||
throw new SnailJobServerException("Request to remote interface exception. path:[{}]",
|
||||
mapping.path());
|
||||
} catch (TimeoutException e) {
|
||||
throw new SnailJobServerException("Request to remote interface timed out. path:[{}]",
|
||||
mapping.path());
|
||||
}
|
||||
return (Result) newFuture.get(Integer.MAX_VALUE, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
});
|
||||
@ -189,9 +182,9 @@ public class RpcClientInvokeHandler implements InvocationHandler {
|
||||
hostIp, hostPort, NetUtil.getLocalIpStr());
|
||||
|
||||
return result;
|
||||
} catch (RestClientException ex) {
|
||||
// 网络异常
|
||||
if (ex instanceof ResourceAccessException && failover) {
|
||||
} catch (ExecutionException ex) {
|
||||
// 网络异常 TimeoutException |
|
||||
if (ex.getCause() instanceof SnailJobRemotingTimeOutException && failover) {
|
||||
log.error("request client I/O error, count:[{}] clientId:[{}] clientAddr:[{}:{}] serverIp:[{}]", count,
|
||||
hostId, hostIp, hostPort, NetUtil.getLocalIpStr(), ex);
|
||||
|
||||
@ -204,7 +197,7 @@ public class RpcClientInvokeHandler implements InvocationHandler {
|
||||
routeKey);
|
||||
// 这里表示无可用节点
|
||||
if (Objects.isNull(serverNode)) {
|
||||
throw ex;
|
||||
throw ex.getCause();
|
||||
}
|
||||
|
||||
this.hostId = serverNode.getHostId();
|
||||
@ -215,7 +208,7 @@ public class RpcClientInvokeHandler implements InvocationHandler {
|
||||
// 其他异常继续抛出
|
||||
log.error("request client error.count:[{}] clientId:[{}] clientAddr:[{}:{}] serverIp:[{}]", count,
|
||||
hostId, hostIp, hostPort, NetUtil.getLocalIpStr(), ex);
|
||||
throw ex;
|
||||
throw ex.getCause();
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
log.error("request client unknown exception. count:[{}] clientId:[{}] clientAddr:[{}:{}] serverIp:[{}]",
|
||||
@ -225,7 +218,7 @@ public class RpcClientInvokeHandler implements InvocationHandler {
|
||||
if (ex.getClass().isAssignableFrom(RetryException.class)) {
|
||||
RetryException re = (RetryException) ex;
|
||||
throwable = re.getLastFailedAttempt().getExceptionCause();
|
||||
if (throwable instanceof ResourceAccessException) {
|
||||
if (throwable.getCause() instanceof SnailJobRemotingTimeOutException) {
|
||||
// 若重试之后该接口仍然有问题,进行路由剔除处理
|
||||
CacheRegisterTable.remove(groupName, namespaceId, hostId);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user