diff --git a/pom.xml b/pom.xml index 8e11bbcb..078e211e 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 17 17 17 - 1.1.0 + 1.1.1 4.1.94.Final 5.8.25 3.5.7 diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/config/SnailJobProperties.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/config/SnailJobProperties.java index 50844701..58ace1fe 100644 --- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/config/SnailJobProperties.java +++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/config/SnailJobProperties.java @@ -1,6 +1,6 @@ package com.aizuda.snailjob.client.common.config; -import com.aizuda.snailjob.common.core.alarm.email.MailProperties; +import com.aizuda.snailjob.common.core.alarm.email.SnailJobMailProperties; import lombok.Data; import lombok.Getter; import lombok.Setter; @@ -75,7 +75,7 @@ public class SnailJobProperties { * 邮件配置 */ @NestedConfigurationProperty - private MailProperties mail = new MailProperties(); + private SnailJobMailProperties mail = new SnailJobMailProperties(); @Data public static class ServerConfig { diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/handler/ClientRegister.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/handler/ClientRegister.java new file mode 100644 index 00000000..b5056c30 --- /dev/null +++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/handler/ClientRegister.java @@ -0,0 +1,55 @@ +package com.aizuda.snailjob.client.common.handler; + +import com.aizuda.snailjob.client.common.Lifecycle; +import com.aizuda.snailjob.client.common.NettyClient; +import com.aizuda.snailjob.client.common.rpc.client.RequestBuilder; +import com.aizuda.snailjob.common.core.constant.SystemConstants.BEAT; +import com.aizuda.snailjob.common.core.enums.StatusEnum; +import com.aizuda.snailjob.common.core.model.NettyResult; +import com.aizuda.snailjob.common.log.SnailJobLog; +import org.springframework.stereotype.Component; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * @author: oepnsnail + * @date : 2024-07-17 + * @since : 1.1.1 + */ +@Component +public class ClientRegister implements Lifecycle { + private static final ScheduledExecutorService SCHEDULE_EXECUTOR = Executors.newSingleThreadScheduledExecutor( + r -> new Thread(r, "sj-client-register")); + public static final NettyClient CLIENT; + public static final int REGISTER_TIME = 10; + + static { + CLIENT = RequestBuilder.newBuilder() + .client(NettyClient.class) + .callback( + nettyResult -> { + if (StatusEnum.NO.getStatus().equals(nettyResult.getStatus())) { + SnailJobLog.LOCAL.error("heartbeat check requestId:[{}] message:[{}]", nettyResult.getReqId(), nettyResult.getMessage()); + } + }) + .build(); + } + + @Override + public void start() { + SCHEDULE_EXECUTOR.scheduleAtFixedRate(() -> { + try { + CLIENT.beat(BEAT.PING); + } catch (Exception e) { + SnailJobLog.LOCAL.error("发送心跳失败", e); + } + }, 0, REGISTER_TIME, TimeUnit.SECONDS); + } + + @Override + public void close() { + + } +} diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/NettyHttpClientHandler.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/NettyHttpClientHandler.java index 51e92655..08bb3316 100644 --- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/NettyHttpClientHandler.java +++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/NettyHttpClientHandler.java @@ -2,8 +2,10 @@ package com.aizuda.snailjob.client.common.rpc.client; import com.aizuda.snailjob.client.common.NettyClient; import com.aizuda.snailjob.client.common.event.SnailChannelReconnectEvent; +import com.aizuda.snailjob.client.common.handler.ClientRegister; import com.aizuda.snailjob.common.core.constant.SystemConstants.BEAT; import com.aizuda.snailjob.common.core.context.SpringContext; +import com.aizuda.snailjob.common.core.enums.StatusEnum; import com.aizuda.snailjob.common.core.model.NettyResult; import com.aizuda.snailjob.common.core.rpc.RpcContext; import com.aizuda.snailjob.common.core.util.JsonUtil; @@ -28,17 +30,9 @@ import java.util.concurrent.TimeUnit; @Slf4j public class NettyHttpClientHandler extends SimpleChannelInboundHandler { - private NettyClient client; private NettyHttpConnectClient nettyHttpConnectClient; public NettyHttpClientHandler(NettyHttpConnectClient nettyHttpConnectClient) { - - client = RequestBuilder.newBuilder() - .client(NettyClient.class) - .callback( - nettyResult -> SnailJobLog.LOCAL.debug("heartbeat check requestId:[{}]", nettyResult.getReqId())) - .build(); - this.nettyHttpConnectClient = nettyHttpConnectClient; } @@ -112,7 +106,7 @@ public class NettyHttpClientHandler extends SimpleChannelInboundHandler { - private final MailProperties mailProperties; + private final SnailJobMailProperties snailJobMailProperties; private MailAccount mailAccount; @Override @@ -63,28 +63,28 @@ public class EmailAlarm extends AbstractAlarm { @Override public void afterPropertiesSet() throws Exception { super.afterPropertiesSet(); - Boolean enabled = mailProperties.getEnabled(); + Boolean enabled = snailJobMailProperties.getEnabled(); if (Objects.isNull(enabled) || Boolean.FALSE.equals(enabled)) { return; } - mailAccount = initMailAccount(mailProperties); + mailAccount = initMailAccount(snailJobMailProperties); MailUtils.setMailAccount(mailAccount); } - private MailAccount initMailAccount(MailProperties mailProperties) { + private MailAccount initMailAccount(SnailJobMailProperties snailJobMailProperties) { MailAccount account = new MailAccount(); - account.setHost(mailProperties.getHost()); - account.setPort(mailProperties.getPort()); - account.setAuth(Optional.ofNullable(mailProperties.getAuth()).orElse(Boolean.FALSE)); - account.setFrom(mailProperties.getFrom()); - account.setUser(mailProperties.getUser()); - account.setPass(mailProperties.getPass()); - account.setSocketFactoryPort(Optional.ofNullable(mailProperties.getPort()).orElse(465)); - account.setStarttlsEnable(Optional.ofNullable(mailProperties.getStarttlsEnable()).orElse(Boolean.FALSE)); - account.setSslEnable(Optional.ofNullable(mailProperties.getSslEnable()).orElse(Boolean.FALSE)); - account.setTimeout(Optional.ofNullable(mailProperties.getTimeout()).orElse(0L)); - account.setConnectionTimeout(Optional.ofNullable(mailProperties.getConnectionTimeout()).orElse(0L)); + account.setHost(snailJobMailProperties.getHost()); + account.setPort(snailJobMailProperties.getPort()); + account.setAuth(Optional.ofNullable(snailJobMailProperties.getAuth()).orElse(Boolean.FALSE)); + account.setFrom(snailJobMailProperties.getFrom()); + account.setUser(snailJobMailProperties.getUser()); + account.setPass(snailJobMailProperties.getPass()); + account.setSocketFactoryPort(Optional.ofNullable(snailJobMailProperties.getPort()).orElse(465)); + account.setStarttlsEnable(Optional.ofNullable(snailJobMailProperties.getStarttlsEnable()).orElse(Boolean.FALSE)); + account.setSslEnable(Optional.ofNullable(snailJobMailProperties.getSslEnable()).orElse(Boolean.FALSE)); + account.setTimeout(Optional.ofNullable(snailJobMailProperties.getTimeout()).orElse(0L)); + account.setConnectionTimeout(Optional.ofNullable(snailJobMailProperties.getConnectionTimeout()).orElse(0L)); return account; } } diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/config/SystemProperties.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/config/SystemProperties.java index 71fb0257..f3613ca4 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/config/SystemProperties.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/config/SystemProperties.java @@ -1,6 +1,6 @@ package com.aizuda.snailjob.server.common.config; -import com.aizuda.snailjob.common.core.alarm.email.MailProperties; +import com.aizuda.snailjob.common.core.alarm.email.SnailJobMailProperties; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.NestedConfigurationProperty; @@ -109,6 +109,6 @@ public class SystemProperties { * 邮件配置 */ @NestedConfigurationProperty - private MailProperties mail = new MailProperties(); + private SnailJobMailProperties mail = new SnailJobMailProperties(); } diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/register/AbstractRegister.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/register/AbstractRegister.java index 8c9f899f..18f1d538 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/register/AbstractRegister.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/register/AbstractRegister.java @@ -93,7 +93,7 @@ public abstract class AbstractRegister implements Register, Lifecycle { try { // 批量更新 - if (updateDBs.size() != serverNodeMapper.updateBatchExpireAt(updateDBs)) { + if (CollUtil.isNotEmpty(updateDBs) && updateDBs.size() != serverNodeMapper.updateBatchExpireAt(updateDBs)) { SnailJobLog.LOCAL.warn("续租失败 [{}]", JsonUtil.toJsonString(updateDBs)); } } catch (Exception e) { @@ -101,7 +101,7 @@ public abstract class AbstractRegister implements Register, Lifecycle { } try { - if (insertDBs.size() != serverNodeMapper.insertBatch(insertDBs)) { + if (CollUtil.isNotEmpty(insertDBs) && insertDBs.size() != serverNodeMapper.insertBatch(insertDBs)) { SnailJobLog.LOCAL.warn("注册节点失败 [{}]", JsonUtil.toJsonString(insertDBs)); } } catch (DuplicateKeyException ignored) { diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/register/ClientRegister.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/register/ClientRegister.java index 29eee112..13d85cdb 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/register/ClientRegister.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/register/ClientRegister.java @@ -102,7 +102,7 @@ public class ClientRegister extends AbstractRegister implements Runnable { } finally { // 防止刷的过快 try { - TimeUnit.MILLISECONDS.sleep(5000); + TimeUnit.MILLISECONDS.sleep(2000); } catch (InterruptedException ignored) { Thread.currentThread().interrupt(); } diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/RequestHandlerActor.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/RequestHandlerActor.java index 29b55518..61fcd568 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/RequestHandlerActor.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/RequestHandlerActor.java @@ -88,10 +88,10 @@ public class RequestHandlerActor extends AbstractActor { String token = headers.get(HeadersEnum.TOKEN.getKey()); if (StrUtil.isBlank(token) || !CacheToken.get(groupName, namespace).equals(token)) { - throw new SnailJobServerException("Token authentication failed. [{}]", token); + throw new SnailJobServerException("Token authentication failed. [namespace:{} groupName:{} token:{}]", namespace, groupName, token); } - // 注册版本 + // 注册版本 此后后续版本将迁移至BeatHttpRequestHandler 只处理beat的心态注册 RegisterContext registerContext = new RegisterContext(); registerContext.setGroupName(groupName); registerContext.setHostPort(hostPort); diff --git a/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java b/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java index 86b5e7f2..14e37eb2 100644 --- a/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java +++ b/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java @@ -132,6 +132,10 @@ public abstract class AbstractScanGroup extends AbstractActor { waitUpdateRetryTasks.add(retryTask); } + if (CollUtil.isEmpty(waitUpdateRetryTasks)) { + return; + } + // 批量更新 retryTaskMapper.updateBatchNextTriggerAtById(scanTask.getGroupPartition(), waitUpdateRetryTasks); diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/spring-configuration-metadata.json b/snail-job-server/snail-job-server-starter/src/main/resources/spring-configuration-metadata.json index 3488d073..bdc376d2 100644 --- a/snail-job-server/snail-job-server-starter/src/main/resources/spring-configuration-metadata.json +++ b/snail-job-server/snail-job-server-starter/src/main/resources/spring-configuration-metadata.json @@ -16,7 +16,7 @@ }, { "name": "snail-job.mail", - "type": "com.aizuda.snailjob.common.core.alarm.email.MailProperties", + "type": "com.aizuda.snailjob.common.core.alarm.email.SnailJobMailProperties", "description": "邮箱配置", "sourceType": "com.aizuda.snailjob.server.common.config.SystemProperties" }