From 7f4af6c307386d9a92c85267e4e235f48bbe1c9b Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Sat, 14 Jan 2023 19:56:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=87=8D=E8=AF=95=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExistsTransactionalRetryServiceTest.java | 1 - .../dispatch/actor/exec/ExecUnitActor.java | 12 +++++------ .../dispatch/actor/result/FailureActor.java | 21 ++++++++++++++----- .../dispatch/actor/result/FinishActor.java | 21 +++++++++++++------ .../AuthenticationInterceptor.java | 2 +- 5 files changed, 38 insertions(+), 19 deletions(-) diff --git a/example/src/test/java/com/example/ExistsTransactionalRetryServiceTest.java b/example/src/test/java/com/example/ExistsTransactionalRetryServiceTest.java index 21ad0dacd..d57815a6e 100644 --- a/example/src/test/java/com/example/ExistsTransactionalRetryServiceTest.java +++ b/example/src/test/java/com/example/ExistsTransactionalRetryServiceTest.java @@ -49,7 +49,6 @@ public class ExistsTransactionalRetryServiceTest { log.error("", e); } -// await().atLeast(1, TimeUnit.MINUTES); Thread.sleep(90000); } diff --git a/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/exec/ExecUnitActor.java b/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/exec/ExecUnitActor.java index 1d413b7b6..233dfb5a9 100644 --- a/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/exec/ExecUnitActor.java +++ b/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/exec/ExecUnitActor.java @@ -90,7 +90,12 @@ public class ExecUnitActor extends AbstractActor { }catch (Exception e) { LogUtils.error("回调客户端失败 retryTask:[{}]", JsonUtil.toJsonString(retryTask), e); - retryTaskLog.setErrorMessage(e.getMessage()); + retryTaskLog.setErrorMessage(StringUtils.isBlank(e.getMessage()) ? StringUtils.EMPTY : e.getMessage()); + } finally { + + // 清除幂等标识位 + idempotentStrategy.clear(retryTask.getGroupName(), retryTask.getId().intValue()); + getContext().stop(getSelf()); // 记录重试日志 BeanUtils.copyProperties(retryTask, retryTaskLog); @@ -98,11 +103,6 @@ public class ExecUnitActor extends AbstractActor { retryTaskLog.setId(null); Assert.isTrue(1 == retryTaskLogMapper.insert(retryTaskLog), new XRetryServerException("新增重试日志失败")); - } finally { - - // 清除幂等标识位 - idempotentStrategy.clear(retryTask.getGroupName(), retryTask.getId().intValue()); - getContext().stop(getSelf()); } diff --git a/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/result/FailureActor.java b/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/result/FailureActor.java index 987da9fd4..5d6960718 100644 --- a/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/result/FailureActor.java +++ b/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/result/FailureActor.java @@ -2,6 +2,7 @@ package com.x.retry.server.support.dispatch.actor.result; import akka.actor.AbstractActor; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.x.retry.common.core.enums.RetryStatusEnum; import com.x.retry.common.core.log.LogUtils; import com.x.retry.common.core.util.Assert; @@ -19,8 +20,10 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; +import java.util.List; /** * 重试完成执行器 @@ -69,11 +72,19 @@ public class FailureActor extends AbstractActor { getContext().stop(getSelf()); // 记录重试日志 - RetryTaskLog retryTaskLog = new RetryTaskLog(); - retryTaskLog.setRetryStatus(retryTask.getRetryStatus()); - Assert.isTrue(1 == retryTaskLogMapper.update(retryTaskLog, - new LambdaQueryWrapper().eq(RetryTaskLog::getBizId, retryTask.getBizId())), - new XRetryServerException("更新重试日志失败")); + PageDTO retryTaskLogPageDTO = retryTaskLogMapper.selectPage(new PageDTO<>(1, 1), + new LambdaQueryWrapper() + .eq(RetryTaskLog::getBizId, retryTask.getBizId()) + .orderByDesc(RetryTaskLog::getId)); + + List records = retryTaskLogPageDTO.getRecords(); + if (!CollectionUtils.isEmpty(records)) { + RetryTaskLog retryTaskLog = records.get(0); + retryTaskLog.setRetryStatus(retryTask.getRetryStatus()); + Assert.isTrue(1 == retryTaskLogMapper.updateById(retryTaskLog), + new XRetryServerException("更新重试日志失败")); + } + } }).build(); diff --git a/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/result/FinishActor.java b/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/result/FinishActor.java index b845668cd..7c3a77ee6 100644 --- a/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/result/FinishActor.java +++ b/x-retry-server/src/main/java/com/x/retry/server/support/dispatch/actor/result/FinishActor.java @@ -2,6 +2,7 @@ package com.x.retry.server.support.dispatch.actor.result; import akka.actor.AbstractActor; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.x.retry.common.core.enums.RetryStatusEnum; import com.x.retry.common.core.log.LogUtils; import com.x.retry.common.core.util.Assert; @@ -17,8 +18,10 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; +import java.util.List; /** * 重试完成执行器 @@ -49,7 +52,6 @@ public class FinishActor extends AbstractActor { retryTask.setRetryStatus(RetryStatusEnum.FINISH.getLevel()); - try { retryTaskAccess.updateRetryTask(retryTask); }catch (Exception e) { @@ -59,11 +61,18 @@ public class FinishActor extends AbstractActor { getContext().stop(getSelf()); // 记录重试日志 - RetryTaskLog retryTaskLog = new RetryTaskLog(); - retryTaskLog.setRetryStatus(retryTask.getRetryStatus()); - Assert.isTrue(1 == retryTaskLogMapper.update(retryTaskLog, - new LambdaQueryWrapper().eq(RetryTaskLog::getBizId, retryTask.getBizId())), - new XRetryServerException("更新重试日志失败")); + PageDTO retryTaskLogPageDTO = retryTaskLogMapper.selectPage(new PageDTO<>(1, 1), + new LambdaQueryWrapper() + .eq(RetryTaskLog::getBizId, retryTask.getBizId()) + .orderByDesc(RetryTaskLog::getId)); + + List records = retryTaskLogPageDTO.getRecords(); + if (!CollectionUtils.isEmpty(records)) { + RetryTaskLog retryTaskLog = records.get(0); + retryTaskLog.setRetryStatus(retryTask.getRetryStatus()); + Assert.isTrue(1 == retryTaskLogMapper.updateById(retryTaskLog), + new XRetryServerException("更新重试日志失败")); + } } diff --git a/x-retry-server/src/main/java/com/x/retry/server/web/interceptor/AuthenticationInterceptor.java b/x-retry-server/src/main/java/com/x/retry/server/web/interceptor/AuthenticationInterceptor.java index f82163de3..3e7ac6304 100644 --- a/x-retry-server/src/main/java/com/x/retry/server/web/interceptor/AuthenticationInterceptor.java +++ b/x-retry-server/src/main/java/com/x/retry/server/web/interceptor/AuthenticationInterceptor.java @@ -59,7 +59,7 @@ public class AuthenticationInterceptor implements HandlerInterceptor { if (loginRequired.required()) { // 执行认证 if (token == null) { - throw new XRetryServerException("无效token"); + throw new XRetryServerException("登陆过期,请重新登陆"); } // 获取 token 中的 user id