From d3b8c4e35369f210d5c7570442c7acc6e7d6acc1 Mon Sep 17 00:00:00 2001 From: tjq Date: Sat, 31 Dec 2022 12:42:57 +0800 Subject: [PATCH] feat: define powerjob remote --- pom.xml | 1 + powerjob-remote/pom.xml | 24 +++++++++++ .../powerjob-remote-framework/pom.xml | 30 ++++++++++++++ .../remote/framework/actor/Actor.java | 21 ++++++++++ .../remote/framework/actor/Handler.java | 21 ++++++++++ .../remote/framework/actor/HandlerInfo.java | 25 ++++++++++++ .../remote/framework/base/Address.java | 21 ++++++++++ .../framework/base/HandlerLocation.java | 27 +++++++++++++ .../framework/base/RemotingException.java | 14 +++++++ .../powerjob/remote/framework/base/URL.java | 21 ++++++++++ .../remote/framework/cs/CSInitializer.java | 34 ++++++++++++++++ .../framework/cs/CSInitializerConfig.java | 22 ++++++++++ .../remote/framework/package-info.java | 7 ++++ .../framework/transporter/Protocol.java | 16 ++++++++ .../framework/transporter/Transporter.java | 40 +++++++++++++++++++ 15 files changed, 324 insertions(+) create mode 100644 powerjob-remote/pom.xml create mode 100644 powerjob-remote/powerjob-remote-framework/pom.xml create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Actor.java create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Handler.java create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/HandlerInfo.java create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/Address.java create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/HandlerLocation.java create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/RemotingException.java create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/URL.java create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializer.java create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializerConfig.java create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/package-info.java create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Protocol.java create mode 100644 powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Transporter.java diff --git a/pom.xml b/pom.xml index 8514171c..e3eb3116 100644 --- a/pom.xml +++ b/pom.xml @@ -44,6 +44,7 @@ powerjob-worker-spring-boot-starter powerjob-worker-samples powerjob-official-processors + powerjob-remote diff --git a/powerjob-remote/pom.xml b/powerjob-remote/pom.xml new file mode 100644 index 00000000..4e18ce31 --- /dev/null +++ b/powerjob-remote/pom.xml @@ -0,0 +1,24 @@ + + + + powerjob + tech.powerjob + 3.0.0 + + 4.0.0 + pom + + powerjob-remote-framework + + + powerjob-remote + + + 8 + 8 + UTF-8 + + + \ No newline at end of file diff --git a/powerjob-remote/powerjob-remote-framework/pom.xml b/powerjob-remote/powerjob-remote-framework/pom.xml new file mode 100644 index 00000000..df1512a3 --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/pom.xml @@ -0,0 +1,30 @@ + + + + powerjob-remote + tech.powerjob + 3.0.0 + + 4.0.0 + + powerjob-remote-framework + + + 8 + 8 + UTF-8 + + 4.2.0 + + + + + tech.powerjob + powerjob-common + ${powerjob-common.version} + + + + \ No newline at end of file diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Actor.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Actor.java new file mode 100644 index 00000000..419b3353 --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Actor.java @@ -0,0 +1,21 @@ +package tech.powerjob.remote.framework.actor; + +import java.lang.annotation.*; + +/** + * 行为处理器 + * + * @author tjq + * @since 2022/12/31 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.METHOD}) +public @interface Actor { + + /** + * root path + * @return root path + */ + String path(); +} diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Handler.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Handler.java new file mode 100644 index 00000000..4a4a220e --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Handler.java @@ -0,0 +1,21 @@ +package tech.powerjob.remote.framework.actor; + +import java.lang.annotation.*; + +/** + * Handler + * + * @author tjq + * @since 2022/12/31 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.METHOD}) +public @interface Handler { + + /** + * handler path + * @return handler path + */ + String path(); +} diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/HandlerInfo.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/HandlerInfo.java new file mode 100644 index 00000000..76c94c0a --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/HandlerInfo.java @@ -0,0 +1,25 @@ +package tech.powerjob.remote.framework.actor; + +import tech.powerjob.remote.framework.base.HandlerLocation; + +import java.io.Serializable; +import java.lang.reflect.Method; + +/** + * HandlerInfo + * + * @author tjq + * @since 2022/12/31 + */ +public class HandlerInfo implements Serializable { + + private HandlerLocation location; + /** + * handler 对应的方法 + */ + private Method method; + /** + * actor 对象 + */ + private Object actor; +} diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/Address.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/Address.java new file mode 100644 index 00000000..0ab57738 --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/Address.java @@ -0,0 +1,21 @@ +package tech.powerjob.remote.framework.base; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 地址 + * + * @author tjq + * @since 2022/12/31 + */ +@Getter +@Setter +@Accessors(chain = true) +public class Address implements Serializable { + private String host; + private int port; +} diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/HandlerLocation.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/HandlerLocation.java new file mode 100644 index 00000000..0bffdadf --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/HandlerLocation.java @@ -0,0 +1,27 @@ +package tech.powerjob.remote.framework.base; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * handler location + * + * @author tjq + * @since 2022/12/31 + */ +@Getter +@Setter +@Accessors(chain = true) +public class HandlerLocation implements Serializable { + /** + * 根路径 + */ + private String rootPath; + /** + * 方法路径 + */ + private String methodPath; +} diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/RemotingException.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/RemotingException.java new file mode 100644 index 00000000..24de209b --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/RemotingException.java @@ -0,0 +1,14 @@ +package tech.powerjob.remote.framework.base; + +import java.io.IOException; + +/** + * RemotingException + * + * @author tjq + * @since 2022/12/31 + */ +public class RemotingException extends IOException { + + +} diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/URL.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/URL.java new file mode 100644 index 00000000..98487800 --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/URL.java @@ -0,0 +1,21 @@ +package tech.powerjob.remote.framework.base; + +import java.io.Serializable; + +/** + * URL + * + * @author tjq + * @since 2022/12/31 + */ +public class URL implements Serializable { + /** + * remote address + */ + private Address address; + + /** + * location + */ + private HandlerLocation location; +} diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializer.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializer.java new file mode 100644 index 00000000..421f4d6c --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializer.java @@ -0,0 +1,34 @@ +package tech.powerjob.remote.framework.cs; + +import tech.powerjob.remote.framework.actor.HandlerInfo; +import tech.powerjob.remote.framework.transporter.Transporter; + +import java.io.Closeable; +import java.util.List; + +/** + * client & server initializer + * + * @author tjq + * @since 2022/12/31 + */ +public interface CSInitializer extends Closeable { + + /** + * initialize the framework + * @param config config + */ + void init(CSInitializerConfig config); + + /** + * build a Transporter by based network framework + * @return Transporter + */ + Transporter buildTransporter(); + + /** + * bind Actor, publish handler's service + * @param handlerInfos handler infos + */ + void bindHandlers(List handlerInfos); +} diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializerConfig.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializerConfig.java new file mode 100644 index 00000000..a48a9078 --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializerConfig.java @@ -0,0 +1,22 @@ +package tech.powerjob.remote.framework.cs; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; +import tech.powerjob.remote.framework.base.Address; + +import java.io.Serializable; + +/** + * CSInitializerConfig + * + * @author tjq + * @since 2022/12/31 + */ +@Getter +@Setter +@Accessors(chain = true) +public class CSInitializerConfig implements Serializable { + + private Address bindAddress; +} diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/package-info.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/package-info.java new file mode 100644 index 00000000..54f6fb30 --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/package-info.java @@ -0,0 +1,7 @@ +/** + * PowerJob 网络框架层 + * + * @author tjq + * @since 2022/12/31 + */ +package tech.powerjob.remote.framework; \ No newline at end of file diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Protocol.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Protocol.java new file mode 100644 index 00000000..d014771f --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Protocol.java @@ -0,0 +1,16 @@ +package tech.powerjob.remote.framework.transporter; + +/** + * 通讯协议 + * + * @author tjq + * @since 2022/12/31 + */ +public interface Protocol { + + /** + * 通讯协议名称 + * @return 协议名称 + */ + String name(); +} diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Transporter.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Transporter.java new file mode 100644 index 00000000..be69945e --- /dev/null +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Transporter.java @@ -0,0 +1,40 @@ +package tech.powerjob.remote.framework.transporter; + +import tech.powerjob.common.PowerSerializable; +import tech.powerjob.remote.framework.base.RemotingException; +import tech.powerjob.remote.framework.base.URL; + +import java.util.concurrent.CompletionStage; +import java.util.concurrent.ExecutorService; + +/** + * 通讯器,封装与远程服务端交互逻辑 + * + * @author tjq + * @since 2022/12/31 + */ +public interface Transporter { + + /** + * Protocol + * @return return protocol + */ + Protocol getProtocol(); + + /** + *send message + * @param url url + * @param request request + */ + void tell(URL url, PowerSerializable request); + + /** + * ask by request + * @param url url + * @param request request + * @param executorService thread pool, null is acceptable + * @return CompletionStage + * @throws RemotingException remote exception + */ + CompletionStage ask(URL url, PowerSerializable request, ExecutorService executorService) throws RemotingException; +}