fix:2.6.0
1:当更细重试次数执行成功之后在进行重试
This commit is contained in:
parent
cda958ef01
commit
85dd27840e
@ -1,8 +1,6 @@
|
||||
package com.aizuda.easy.retry.template.datasource.persistence.po;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
@ -64,6 +62,7 @@ public class JobTask implements Serializable {
|
||||
/**
|
||||
* 重试次数
|
||||
*/
|
||||
@TableField(value = "retry_count", update= "%s+1")
|
||||
private Integer retryCount;
|
||||
|
||||
/**
|
||||
|
@ -1,43 +0,0 @@
|
||||
package com.aizuda.easy.retry.template.datasource.utils;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||
|
||||
/**
|
||||
* LambdaUpdateWrapper 的拓展 支持指定列的自增、自减
|
||||
*
|
||||
* @author lizhongyuan
|
||||
*/
|
||||
|
||||
public class LambdaUpdateExpandWrapper<T> extends LambdaUpdateWrapper<T> {
|
||||
|
||||
public LambdaUpdateExpandWrapper(Class<T> entityClass) {
|
||||
super(entityClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* 指定列自增
|
||||
*
|
||||
* @param columns 列引用
|
||||
* @param value 增长值
|
||||
*/
|
||||
public LambdaUpdateExpandWrapper<T> incrField(SFunction<T, ?> columns, Object value) {
|
||||
String columnsToString = super.columnToString(columns);
|
||||
String format = String.format("%s = %s + %s", columnsToString, columnsToString, formatSqlMaybeWithParam("{0}", value));
|
||||
setSql(format);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 指定列自减
|
||||
*
|
||||
* @param columns 列引用
|
||||
* @param value 减少值
|
||||
*/
|
||||
public LambdaUpdateExpandWrapper<T> descField(SFunction<T, ?> columns, Object value) {
|
||||
String columnsToString = super.columnToString(columns);
|
||||
String format = String.format("%s = %s - %s", columnsToString, columnsToString, formatSqlMaybeWithParam("{0}", value));
|
||||
setSql(format);
|
||||
return this;
|
||||
}
|
||||
}
|
@ -12,6 +12,8 @@ import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.Job;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import com.aizuda.easy.retry.template.datasource.utils.LambdaUpdateExpandWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.aizuda.easy.retry.common.core.enums.JobTaskTypeEnum;
|
||||
@ -48,16 +50,19 @@ public class BroadcastClientCallbackHandler extends AbstractClientCallbackHandle
|
||||
}
|
||||
if (jobTask.getRetryCount() < job.getMaxRetryTimes()) {
|
||||
// 更新重试次数
|
||||
jobTaskMapper.update(null, new LambdaUpdateExpandWrapper<>(JobTask.class)
|
||||
.incrField(JobTask::getRetryCount, 1)
|
||||
JobTask updateJobTask = new JobTask();
|
||||
updateJobTask.setRetryCount(1);
|
||||
boolean success = SqlHelper.retBool(jobTaskMapper.update(updateJobTask, Wrappers.<JobTask>lambdaUpdate()
|
||||
.lt(JobTask::getRetryCount, job.getMaxRetryTimes())
|
||||
.eq(JobTask::getId, context.getTaskId())
|
||||
);
|
||||
));
|
||||
if (success) {
|
||||
RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(JobTaskConverter.INSTANCE.toJobExecutorContext(job), jobTask);
|
||||
realJobExecutor.setClientId(ClientInfoUtils.clientId(jobTask.getClientInfo()));
|
||||
ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor();
|
||||
actorRef.tell(realJobExecutor, actorRef);
|
||||
// TODO 记录日志
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -14,6 +14,8 @@ import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.Job;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import com.aizuda.easy.retry.template.datasource.utils.LambdaUpdateExpandWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.aizuda.easy.retry.common.core.enums.JobTaskTypeEnum;
|
||||
@ -63,18 +65,21 @@ public class ClusterClientCallbackHandler extends AbstractClientCallbackHandler
|
||||
}
|
||||
String newClient = ClientInfoUtils.generate(serverNode);
|
||||
// 更新重试次数
|
||||
jobTaskMapper.update(null, new LambdaUpdateExpandWrapper<>(JobTask.class)
|
||||
.incrField(JobTask::getRetryCount, 1)
|
||||
.set(JobTask::getClientInfo, newClient)
|
||||
JobTask updateJobTask = new JobTask();
|
||||
updateJobTask.setClientInfo(newClient);
|
||||
updateJobTask.setRetryCount(1);
|
||||
boolean success = SqlHelper.retBool(jobTaskMapper.update(updateJobTask, Wrappers.<JobTask>lambdaUpdate()
|
||||
.lt(JobTask::getRetryCount, job.getMaxRetryTimes())
|
||||
.eq(JobTask::getId, context.getTaskId())
|
||||
);
|
||||
));
|
||||
// 更新成功执行重试
|
||||
if (success) {
|
||||
RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(JobTaskConverter.INSTANCE.toJobExecutorContext(job), jobTask);
|
||||
realJobExecutor.setClientId(ClientInfoUtils.clientId(newClient));
|
||||
ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor();
|
||||
// 执行重试操作
|
||||
actorRef.tell(realJobExecutor, actorRef);
|
||||
// TODO 记录日志
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,8 @@ import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.Job;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import com.aizuda.easy.retry.template.datasource.utils.LambdaUpdateExpandWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.aizuda.easy.retry.common.core.enums.JobTaskTypeEnum;
|
||||
@ -61,17 +63,22 @@ public class ShardingClientCallbackHandler extends AbstractClientCallbackHandler
|
||||
RegisterNodeInfo serverNode = RandomUtil.randomEle(nodes.toArray(new RegisterNodeInfo[0]));
|
||||
String newClient = ClientInfoUtils.generate(serverNode);
|
||||
// 更新重试次数
|
||||
jobTaskMapper.update(null, new LambdaUpdateExpandWrapper<>(JobTask.class)
|
||||
.incrField(JobTask::getRetryCount, 1)
|
||||
.set(JobTask::getClientInfo, newClient)
|
||||
JobTask updateJobTask = new JobTask();
|
||||
updateJobTask.setClientInfo(newClient);
|
||||
updateJobTask.setRetryCount(1);
|
||||
boolean success = SqlHelper.retBool(
|
||||
jobTaskMapper.update(updateJobTask, Wrappers.<JobTask>lambdaUpdate()
|
||||
.lt(JobTask::getRetryCount, job.getMaxRetryTimes())
|
||||
.eq(JobTask::getId, context.getTaskId())
|
||||
)
|
||||
);
|
||||
if (success) {
|
||||
RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(JobTaskConverter.INSTANCE.toJobExecutorContext(job), jobTask);
|
||||
realJobExecutor.setClientId(ClientInfoUtils.clientId(newClient));
|
||||
ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor();
|
||||
actorRef.tell(realJobExecutor, actorRef);
|
||||
// TODO 记录日志
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user