feat: support lazy init#725

This commit is contained in:
tjq 2023-09-02 13:35:54 +08:00
parent c875ba3d37
commit 882392a5e5
6 changed files with 28 additions and 12 deletions

View File

@ -1,11 +1,13 @@
package tech.powerjob.worker.background.discovery; package tech.powerjob.common.model;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.Serializable;
/** /**
* 应用信息 * WorkerAppInfo
* *
* @author tjq * @author tjq
* @since 2023/9/2 * @since 2023/9/2
@ -13,7 +15,7 @@ import lombok.experimental.Accessors;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@Accessors(chain = true) @Accessors(chain = true)
public class AppInfo { public class WorkerAppInfo implements Serializable {
/** /**
* 应用唯一 ID * 应用唯一 ID

View File

@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import tech.powerjob.common.model.WorkerAppInfo;
import tech.powerjob.common.request.ServerDiscoveryRequest; import tech.powerjob.common.request.ServerDiscoveryRequest;
import tech.powerjob.common.response.ResultDTO; import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.common.utils.CommonUtils; import tech.powerjob.common.utils.CommonUtils;
@ -50,6 +51,16 @@ public class ServerController implements ServerInfoAware {
orElseGet(() -> ResultDTO.failed(String.format("app(%s) is not registered! Please register the app in oms-console first.", appName))); orElseGet(() -> ResultDTO.failed(String.format("app(%s) is not registered! Please register the app in oms-console first.", appName)));
} }
@GetMapping("/assertV2")
public ResultDTO<WorkerAppInfo> assertAppNameV2(String appName) {
Optional<AppInfoDO> appInfoOpt = appInfoRepository.findByAppName(appName);
return appInfoOpt.map(appInfoDO -> {
WorkerAppInfo workerAppInfo = new WorkerAppInfo().setAppId(appInfoDO.getId());
return ResultDTO.success(workerAppInfo);
}).
orElseGet(() -> ResultDTO.failed(String.format("app(%s) is not registered! Please register the app in oms-console first.", appName)));
}
@GetMapping("/acquire") @GetMapping("/acquire")
public ResultDTO<String> acquireServer(ServerDiscoveryRequest request) { public ResultDTO<String> acquireServer(ServerDiscoveryRequest request) {
return ResultDTO.success(serverElectionService.elect(request)); return ResultDTO.success(serverElectionService.elect(request));

View File

@ -4,6 +4,7 @@ import com.google.common.base.Stopwatch;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import tech.powerjob.common.PowerJobDKey; import tech.powerjob.common.PowerJobDKey;
import tech.powerjob.common.model.WorkerAppInfo;
import tech.powerjob.common.utils.CommonUtils; import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.common.utils.NetUtils; import tech.powerjob.common.utils.NetUtils;
import tech.powerjob.common.utils.PropertyUtils; import tech.powerjob.common.utils.PropertyUtils;
@ -18,7 +19,6 @@ import tech.powerjob.worker.actors.TaskTrackerActor;
import tech.powerjob.worker.actors.WorkerActor; import tech.powerjob.worker.actors.WorkerActor;
import tech.powerjob.worker.background.OmsLogHandler; import tech.powerjob.worker.background.OmsLogHandler;
import tech.powerjob.worker.background.WorkerHealthReporter; import tech.powerjob.worker.background.WorkerHealthReporter;
import tech.powerjob.worker.background.discovery.AppInfo;
import tech.powerjob.worker.background.discovery.PowerJobServerDiscoveryService; import tech.powerjob.worker.background.discovery.PowerJobServerDiscoveryService;
import tech.powerjob.worker.background.discovery.ServerDiscoveryService; import tech.powerjob.worker.background.discovery.ServerDiscoveryService;
import tech.powerjob.worker.common.PowerBannerPrinter; import tech.powerjob.worker.common.PowerBannerPrinter;
@ -75,7 +75,7 @@ public class PowerJobWorker {
try { try {
PowerBannerPrinter.print(); PowerBannerPrinter.print();
// 校验 appName // 校验 appName
AppInfo appInfo = serverDiscoveryService.assertApp(); WorkerAppInfo appInfo = serverDiscoveryService.assertApp();
workerRuntime.setAppInfo(appInfo); workerRuntime.setAppInfo(appInfo);
// 初始化网络数据区别对待上报地址和本机绑定地址对外统一使用上报地址 // 初始化网络数据区别对待上报地址和本机绑定地址对外统一使用上报地址

View File

@ -8,6 +8,7 @@ import org.apache.commons.lang3.exception.ExceptionUtils;
import tech.powerjob.common.OmsConstant; import tech.powerjob.common.OmsConstant;
import tech.powerjob.common.exception.ImpossibleException; import tech.powerjob.common.exception.ImpossibleException;
import tech.powerjob.common.exception.PowerJobException; import tech.powerjob.common.exception.PowerJobException;
import tech.powerjob.common.model.WorkerAppInfo;
import tech.powerjob.common.request.ServerDiscoveryRequest; import tech.powerjob.common.request.ServerDiscoveryRequest;
import tech.powerjob.common.response.ObjectResultDTO; import tech.powerjob.common.response.ObjectResultDTO;
import tech.powerjob.common.serialize.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
@ -33,7 +34,7 @@ import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
public class PowerJobServerDiscoveryService implements ServerDiscoveryService { public class PowerJobServerDiscoveryService implements ServerDiscoveryService {
private final AppInfo appInfo = new AppInfo(); private final WorkerAppInfo appInfo = new WorkerAppInfo();
private String currentServerAddress; private String currentServerAddress;
@ -61,7 +62,7 @@ public class PowerJobServerDiscoveryService implements ServerDiscoveryService {
} }
@Override @Override
public AppInfo assertApp() { public WorkerAppInfo assertApp() {
try { try {
return assertApp0(); return assertApp0();
} catch (Exception e) { } catch (Exception e) {
@ -76,7 +77,7 @@ public class PowerJobServerDiscoveryService implements ServerDiscoveryService {
throw new ImpossibleException(); throw new ImpossibleException();
} }
private AppInfo assertApp0() { private WorkerAppInfo assertApp0() {
String appName = config.getAppName(); String appName = config.getAppName();
Objects.requireNonNull(appName, "appName can't be empty!"); Objects.requireNonNull(appName, "appName can't be empty!");
@ -97,7 +98,7 @@ public class PowerJobServerDiscoveryService implements ServerDiscoveryService {
} }
// 新版本接口直接下发 AppInfo 内容后续可扩展安全加密等信息 // 新版本接口直接下发 AppInfo 内容后续可扩展安全加密等信息
AppInfo serverAppInfo = JsonUtils.parseObject(JsonUtils.toJSONString(resultDataContent), AppInfo.class); WorkerAppInfo serverAppInfo = JsonUtils.parseObject(JsonUtils.toJSONString(resultDataContent), WorkerAppInfo.class);
appInfo.setAppId(serverAppInfo.getAppId()); appInfo.setAppId(serverAppInfo.getAppId());
return appInfo; return appInfo;
} else { } else {

View File

@ -1,5 +1,7 @@
package tech.powerjob.worker.background.discovery; package tech.powerjob.worker.background.discovery;
import tech.powerjob.common.model.WorkerAppInfo;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
/** /**
@ -14,7 +16,7 @@ public interface ServerDiscoveryService {
* 鉴权 & 附带信息下发 * 鉴权 & 附带信息下发
* @return appInfo * @return appInfo
*/ */
AppInfo assertApp(); WorkerAppInfo assertApp();
/** /**
* 获取当前的 server 地址 * 获取当前的 server 地址

View File

@ -1,9 +1,9 @@
package tech.powerjob.worker.common; package tech.powerjob.worker.common;
import lombok.Data; import lombok.Data;
import tech.powerjob.common.model.WorkerAppInfo;
import tech.powerjob.remote.framework.transporter.Transporter; import tech.powerjob.remote.framework.transporter.Transporter;
import tech.powerjob.worker.background.OmsLogHandler; import tech.powerjob.worker.background.OmsLogHandler;
import tech.powerjob.worker.background.discovery.AppInfo;
import tech.powerjob.worker.background.discovery.ServerDiscoveryService; import tech.powerjob.worker.background.discovery.ServerDiscoveryService;
import tech.powerjob.worker.core.executor.ExecutorManager; import tech.powerjob.worker.core.executor.ExecutorManager;
import tech.powerjob.worker.persistence.TaskPersistenceService; import tech.powerjob.worker.persistence.TaskPersistenceService;
@ -23,7 +23,7 @@ public class WorkerRuntime {
/** /**
* App 基础信息 * App 基础信息
*/ */
private AppInfo appInfo; private WorkerAppInfo appInfo;
/** /**
* 当前执行器地址 * 当前执行器地址
*/ */