From 7c5c40f88b71b6bdc333835022d2c72b76ff8263 Mon Sep 17 00:00:00 2001 From: "www.byteblogs.com" <598092184@qq.com> Date: Sat, 24 Jun 2023 17:10:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=202.0.0=201.=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=AE=A2=E6=88=B7=E7=AB=AF=E7=9A=84=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E4=BF=A1=E6=81=AF=202.=20=E7=BB=84=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=88=86=E5=8C=BA=E6=97=B6=EF=BC=8C=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E5=AF=B9=E5=BA=94=E7=9A=84=E8=A1=A8=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=AD=98=E5=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/client/RpcClientInvokeHandler.java | 17 ++++--- .../service/impl/GroupConfigServiceImpl.java | 49 +++++++++++++++++++ 2 files changed, 58 insertions(+), 8 deletions(-) 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 d298b282e..adac8280b 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 @@ -6,6 +6,7 @@ import cn.hutool.core.util.URLUtil; import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.context.SpringContext; import com.aizuda.easy.retry.common.core.model.Result; +import com.aizuda.easy.retry.common.core.util.HostUtils; import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.server.client.annotation.Body; import com.aizuda.easy.retry.server.client.annotation.Header; @@ -76,7 +77,7 @@ public class RpcClientInvokeHandler implements InvocationHandler { // 最多调用size次 int size = serverNodeSet.size(); for (int count = 1; count <= size; count++) { - log.info("Start request client. count:[{}] hostId:[{}] addr:[{}:{}]", count, hostId, hostIp, hostPort); + log.info("Start request client. count:[{}] clientId:[{}] clientAddr:[{}:{}] serverIp:[{}]", count, hostId, hostIp, hostPort, HostUtils.getIp()); Result result = requestRemote(method, args, annotation, count); if (Objects.nonNull(result)) { return result; @@ -110,13 +111,13 @@ public class RpcClientInvokeHandler implements InvocationHandler { // 返回值类型 Result.class); - log.info("Request client success. count:[{}] hostId:[{}] addr:[{}:{}]", count, hostId, hostIp, hostPort); + log.info("Request client success. count:[{}] clientId:[{}] clientAddr:[{}:{}] serverIp:[{}]", count, hostId, hostIp, hostPort, HostUtils.getIp()); return Objects.requireNonNull(response.getBody()); } catch (RestClientException ex) { // 网络异常 if (ex instanceof ResourceAccessException) { - log.error("request client I/O error, count:[{}] hostId:[{}] addr:[{}:{}]", count, hostId, hostIp, hostPort, ex); + log.error("request client I/O error, count:[{}] clientId:[{}] clientAddr:[{}:{}] serverIp:[{}]", count, hostId, hostIp, hostPort, HostUtils.getIp(), ex); // 进行路由剔除处理 CacheRegisterTable.remove(groupName, hostId); @@ -136,11 +137,11 @@ public class RpcClientInvokeHandler implements InvocationHandler { } else { // 其他异常继续抛出 - log.error("request client error.count:[{}] hostId:[{}] addr:[{}:{}]", count, hostId, hostIp, hostPort, ex); + log.error("request client error.count:[{}] clientId:[{}] clientAddr:[{}:{}] serverIp:[{}]", count, hostId, hostIp, hostPort, HostUtils.getIp(), ex); throw ex; } } catch (Exception ex) { - log.error("request client unknown exception. count:[{}] hostId:[{}] addr:[{}:{}]", count, hostId, hostIp, hostPort, ex); + log.error("request client unknown exception. count:[{}] clientId:[{}] clientAddr:[{}:{}] serverIp:[{}]", count, hostId, hostIp, hostPort, HostUtils.getIp(), ex); throw ex; } @@ -190,8 +191,8 @@ public class RpcClientInvokeHandler implements InvocationHandler { @Data private static class ParseParasResult { - Object body = null; - HttpHeaders requestHeaders; - Map paramMap; + private Object body = null; + private HttpHeaders requestHeaders; + private Map paramMap; } } diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/GroupConfigServiceImpl.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/GroupConfigServiceImpl.java index 2240b757c..cd0bd4e50 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/GroupConfigServiceImpl.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/GroupConfigServiceImpl.java @@ -2,18 +2,23 @@ package com.aizuda.easy.retry.server.service.impl; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.HashUtil; +import com.aizuda.easy.retry.server.config.RequestDataHelper; import com.aizuda.easy.retry.server.enums.IdGeneratorMode; import com.aizuda.easy.retry.server.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.persistence.mybatis.mapper.GroupConfigMapper; import com.aizuda.easy.retry.server.persistence.mybatis.mapper.NotifyConfigMapper; +import com.aizuda.easy.retry.server.persistence.mybatis.mapper.RetryDeadLetterMapper; +import com.aizuda.easy.retry.server.persistence.mybatis.mapper.RetryTaskMapper; import com.aizuda.easy.retry.server.persistence.mybatis.mapper.SceneConfigMapper; import com.aizuda.easy.retry.server.persistence.mybatis.mapper.SequenceAllocMapper; import com.aizuda.easy.retry.server.persistence.mybatis.mapper.ServerNodeMapper; import com.aizuda.easy.retry.server.persistence.mybatis.po.GroupConfig; import com.aizuda.easy.retry.server.persistence.mybatis.po.NotifyConfig; +import com.aizuda.easy.retry.server.persistence.mybatis.po.RetryTask; import com.aizuda.easy.retry.server.persistence.mybatis.po.SceneConfig; import com.aizuda.easy.retry.server.persistence.mybatis.po.SequenceAlloc; import com.aizuda.easy.retry.server.persistence.mybatis.po.ServerNode; +import com.aizuda.easy.retry.server.persistence.support.RetryTaskAccess; import com.aizuda.easy.retry.server.support.handler.ConfigVersionSyncHandler; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -31,11 +36,14 @@ import com.aizuda.easy.retry.server.web.model.response.GroupConfigResponseVO; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.BadSqlGrammarException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.sql.SQLSyntaxErrorException; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -59,6 +67,10 @@ public class GroupConfigServiceImpl implements GroupConfigService { @Autowired private ServerNodeMapper serverNodeMapper; @Autowired + protected RetryTaskMapper retryTaskMapper; + @Autowired + protected RetryDeadLetterMapper retryDeadLetterMapper; + @Autowired private SequenceAllocMapper sequenceAllocMapper; @Autowired private ConfigVersionSyncHandler configVersionSyncHandler; @@ -116,6 +128,12 @@ public class GroupConfigServiceImpl implements GroupConfigService { groupConfig.setVersion(groupConfig.getVersion() + 1); BeanUtils.copyProperties(groupConfigRequestVO, groupConfig); + Assert.isTrue(totalPartition > groupConfigRequestVO.getGroupPartition(), () -> new EasyRetryServerException("分区超过最大分区. [{}]", totalPartition-1)); + Assert.isTrue(groupConfigRequestVO.getGroupPartition() >= 0, () -> new EasyRetryServerException("分区不能是负数.")); + + // 校验retry_task_x和retry_dead_letter_x是否存在 + checkGroupPartition(groupConfig); + Assert.isTrue(1 == groupConfigMapper.update(groupConfig, new LambdaUpdateWrapper().eq(GroupConfig::getGroupName, groupConfigRequestVO.getGroupName())), () -> new EasyRetryServerException("exception occurred while adding group. groupConfigVO[{}]", groupConfigRequestVO)); @@ -178,6 +196,37 @@ public class GroupConfigServiceImpl implements GroupConfigService { } Assert.isTrue(1 == groupConfigMapper.insert(groupConfig), () -> new EasyRetryServerException("新增组异常异常 groupConfigVO[{}]", groupConfigRequestVO)); + + // 校验retry_task_x和retry_dead_letter_x是否存在 + checkGroupPartition(groupConfig); + + } + + /** + * 校验retry_task_x和retry_dead_letter_x是否存在 + */ + private void checkGroupPartition(GroupConfig groupConfig) { + try { + RequestDataHelper.setPartition(groupConfig.getGroupName()); + retryTaskMapper.selectById(1); + } catch (BadSqlGrammarException e) { + Optional.ofNullable(e.getMessage()).ifPresent(s -> { + if (s.contains("retry_task_" + groupConfig.getGroupPartition()) && s.contains("doesn't exist")) { + throw new EasyRetryServerException("分区:[{}] '未配置表retry_task_{}', 请联系管理员进行配置", groupConfig.getGroupPartition(), groupConfig.getGroupPartition()); + } + }); + } + + try { + RequestDataHelper.setPartition(groupConfig.getGroupName()); + retryDeadLetterMapper.selectById(1); + } catch (BadSqlGrammarException e) { + Optional.ofNullable(e.getMessage()).ifPresent(s -> { + if (s.contains("retry_dead_letter_" + groupConfig.getGroupPartition()) && s.contains("doesn't exist")) { + throw new EasyRetryServerException("分区:[{}] '未配置表retry_dead_letter_{}', 请联系管理员进行配置", groupConfig.getGroupPartition(), groupConfig.getGroupPartition()); + } + }); + } } @Override