From 5985c0499795738e206b5052942c142e15145849 Mon Sep 17 00:00:00 2001 From: tjq Date: Sat, 4 Mar 2023 21:03:22 +0800 Subject: [PATCH] feat: remove all circular-references by aware --- .../server/core/instance/InstanceManager.java | 14 +++++++--- .../remote/aware/TransportServiceAware.java | 15 +++++++++++ .../server/remote/server/FriendActor.java | 14 +++++----- .../TransportServiceAwareProcessor.java | 27 +++++++++++++++++++ .../src/main/resources/application.properties | 3 --- 5 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/aware/TransportServiceAware.java create mode 100644 powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/support/TransportServiceAwareProcessor.java diff --git a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/instance/InstanceManager.java b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/instance/InstanceManager.java index ee810483..ee2b517d 100644 --- a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/instance/InstanceManager.java +++ b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/instance/InstanceManager.java @@ -22,6 +22,7 @@ import tech.powerjob.server.persistence.remote.model.InstanceInfoDO; import tech.powerjob.server.persistence.remote.model.JobInfoDO; import tech.powerjob.server.persistence.remote.model.UserInfoDO; import tech.powerjob.server.persistence.remote.repository.InstanceInfoRepository; +import tech.powerjob.server.remote.aware.TransportServiceAware; import tech.powerjob.server.remote.transporter.impl.ServerURLFactory; import tech.powerjob.server.remote.transporter.TransportService; import tech.powerjob.server.remote.worker.WorkerClusterQueryService; @@ -41,7 +42,7 @@ import java.util.concurrent.TimeUnit; @Slf4j @Service @RequiredArgsConstructor -public class InstanceManager { +public class InstanceManager implements TransportServiceAware { private final AlarmCenter alarmCenter; @@ -53,10 +54,13 @@ public class InstanceManager { private final WorkflowInstanceManager workflowInstanceManager; - private final TransportService transportService; - private final WorkerClusterQueryService workerClusterQueryService; + /** + * 基础组件通过 aware 注入,避免循环依赖 + */ + private TransportService transportService; + /** * 更新任务状态 * ******************************************** @@ -229,4 +233,8 @@ public class InstanceManager { alarmCenter.alarmFailed(content, userList); } + @Override + public void setTransportService(TransportService transportService) { + this.transportService = transportService; + } } diff --git a/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/aware/TransportServiceAware.java b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/aware/TransportServiceAware.java new file mode 100644 index 00000000..ad5ad703 --- /dev/null +++ b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/aware/TransportServiceAware.java @@ -0,0 +1,15 @@ +package tech.powerjob.server.remote.aware; + +import tech.powerjob.server.common.aware.PowerJobAware; +import tech.powerjob.server.remote.transporter.TransportService; + +/** + * TransportServiceAware + * + * @author tjq + * @since 2023/3/4 + */ +public interface TransportServiceAware extends PowerJobAware { + + void setTransportService(TransportService transportService); +} diff --git a/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/FriendActor.java b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/FriendActor.java index 8d7d56e3..e94a43b7 100644 --- a/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/FriendActor.java +++ b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/FriendActor.java @@ -8,6 +8,7 @@ import tech.powerjob.common.serialize.JsonUtils; import tech.powerjob.remote.framework.actor.Actor; import tech.powerjob.remote.framework.actor.Handler; import tech.powerjob.remote.framework.actor.ProcessType; +import tech.powerjob.server.remote.aware.TransportServiceAware; import tech.powerjob.server.remote.server.election.Ping; import tech.powerjob.server.remote.server.redirector.RemoteProcessReq; import tech.powerjob.server.remote.server.redirector.RemoteRequestProcessor; @@ -24,13 +25,9 @@ import static tech.powerjob.common.RemoteConstant.*; @Slf4j @Component @Actor(path = S4S_PATH) -public class FriendActor { +public class FriendActor implements TransportServiceAware { - private final TransportService transportService; - - public FriendActor(TransportService transportService) { - this.transportService = transportService; - } + private TransportService transportService; /** * 处理存活检测的请求 @@ -54,4 +51,9 @@ public class FriendActor { } return response; } + + @Override + public void setTransportService(TransportService transportService) { + this.transportService = transportService; + } } diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/support/TransportServiceAwareProcessor.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/support/TransportServiceAwareProcessor.java new file mode 100644 index 00000000..dc5aa1a5 --- /dev/null +++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/support/TransportServiceAwareProcessor.java @@ -0,0 +1,27 @@ +package tech.powerjob.server.support; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import tech.powerjob.server.remote.aware.TransportServiceAware; +import tech.powerjob.server.remote.transporter.TransportService; + +import java.util.List; + +/** + * TransportServiceAwareProcessor + * + * @author tjq + * @since 2023/3/4 + */ +@Slf4j +@Component +public class TransportServiceAwareProcessor { + + public TransportServiceAwareProcessor(TransportService transportService, List transportServiceAwares) { + log.info("[TransportServiceAwareProcessor] current transportService: {}", transportService); + transportServiceAwares.forEach(aware -> { + aware.setTransportService(transportService); + log.info("[TransportServiceAwareProcessor] set transportService for: {} successfully", aware); + }); + } +} diff --git a/powerjob-server/powerjob-server-starter/src/main/resources/application.properties b/powerjob-server/powerjob-server-starter/src/main/resources/application.properties index f8cce8b8..1b74735b 100644 --- a/powerjob-server/powerjob-server-starter/src/main/resources/application.properties +++ b/powerjob-server/powerjob-server-starter/src/main/resources/application.properties @@ -13,9 +13,6 @@ spring.servlet.multipart.file-size-threshold=0 spring.servlet.multipart.max-file-size=209715200 spring.servlet.multipart.max-request-size=209715200 -# temporary skip circular references check -spring.main.allow-circular-references=true - ###### PowerJob transporter configuration ###### oms.transporter.active.protocols=AKKA,HTTP oms.transporter.main.protocol=HTTP