diff --git a/pom.xml b/pom.xml
index 2da45a41e..4ec9e35b7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,6 +34,9 @@
1.3.4
3.0.2
32.0.0-jre
+ 1.64.2
+ 2.43.0
+ 3.25.4
@@ -174,11 +177,56 @@
${commons-logging.version}
true
+
- net.devh
- grpc-client-spring-boot-starter
- 3.1.0.RELEASE
+ io.grpc
+ grpc-netty-shaded
+ ${grpc-java.version}
+
+ io.grpc
+ grpc-api
+ ${grpc-java.version}
+
+
+ io.grpc
+ grpc-protobuf
+ ${grpc-java.version}
+
+
+ io.grpc
+ grpc-stub
+ ${grpc-java.version}
+
+
+ io.grpc
+ grpc-util
+ ${grpc-java.version}
+
+
+ io.grpc
+ grpc-testing
+ ${grpc-java.version}
+ test
+
+
+ com.google.api.grpc
+ proto-google-common-protos
+ ${proto-google-common-protos.version}
+
+
+
+ com.google.protobuf
+ protobuf-java
+ ${protobuf-java.version}
+
+
+
+
+
+
+
+
diff --git a/snail-job-client/snail-job-client-common/pom.xml b/snail-job-client/snail-job-client-common/pom.xml
index d951eae9c..f0eb056f8 100644
--- a/snail-job-client/snail-job-client-common/pom.xml
+++ b/snail-job-client/snail-job-client-common/pom.xml
@@ -87,18 +87,24 @@
true
- net.devh
- grpc-client-spring-boot-starter
+ io.grpc
+ grpc-netty-shaded
io.grpc
- grpc-netty-shaded
- 1.63.0
+ grpc-protobuf
- net.devh
- grpc-server-spring-boot-starter
- 3.1.0.RELEASE
+ io.grpc
+ grpc-stub
+
+
+ io.grpc
+ grpc-api
+
+
+ io.grpc
+ grpc-util
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/NettyClient.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/NettyClient.java
index afc5a28a4..940ced1b7 100644
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/NettyClient.java
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/NettyClient.java
@@ -3,7 +3,7 @@ package com.aizuda.snailjob.client.common;
import com.aizuda.snailjob.client.common.annotation.Mapping;
import com.aizuda.snailjob.client.common.rpc.client.RequestMethod;
import com.aizuda.snailjob.common.core.constant.SystemConstants.HTTP_PATH;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.model.Result;
import com.aizuda.snailjob.server.model.dto.LogTaskDTO;
import com.aizuda.snailjob.server.model.dto.RetryTaskDTO;
@@ -21,10 +21,10 @@ import java.util.List;
public interface NettyClient {
@Mapping(method = RequestMethod.POST, path = HTTP_PATH.BATCH_REPORT)
- NettyResult reportRetryInfo(List list);
+ SnailJobRpcResult reportRetryInfo(List list);
@Mapping(method = RequestMethod.POST, path = HTTP_PATH.BATCH_LOG_REPORT)
- NettyResult reportLogTask(List list);
+ SnailJobRpcResult reportLogTask(List list);
@Mapping(method = RequestMethod.POST, path = HTTP_PATH.SYNC_CONFIG)
Result syncRemoteConfig();
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 c1bb63572..ad42ab5c1 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,13 +1,17 @@
package com.aizuda.snailjob.client.common.config;
import com.aizuda.snailjob.common.core.alarm.email.SnailJobMailProperties;
+import com.aizuda.snailjob.common.core.enums.RpcTypeEnum;
+import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
+import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.context.annotation.Configuration;
+import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.TimeUnit;
@@ -49,7 +53,12 @@ public class SnailJobProperties {
/**
* 指定客户端端口
*/
- private Integer port = 1789;
+ private Integer port = 17889;
+
+ /**
+ * rpc类型
+ */
+ private RpcTypeEnum rpcType = RpcTypeEnum.NETTY;
/**
* 重试、调度日志远程上报滑动窗口配置
@@ -61,11 +70,6 @@ public class SnailJobProperties {
*/
private ServerConfig server = new ServerConfig();
- /**
- * 调度线程池配置
- */
- private DispatcherThreadPool dispatcherThreadPool = new DispatcherThreadPool();
-
/**
* 重试模块配置
*/
@@ -82,6 +86,16 @@ public class SnailJobProperties {
*/
private String workspace;
+ /**
+ * 客户端Rpc配置
+ */
+ private RpcClientProperties clientRpc = new RpcClientProperties();
+
+ /**
+ * 服务端Rpc配置
+ */
+ private RpcServerProperties serverRpc = new RpcServerProperties();
+
@Data
public static class ServerConfig {
/**
@@ -92,7 +106,7 @@ public class SnailJobProperties {
/**
* 服务端netty的端口号
*/
- private int port = 1788;
+ private int port = 17888;
}
@Data
@@ -146,7 +160,47 @@ public class SnailJobProperties {
}
@Data
- public static class DispatcherThreadPool {
+ public static class Retry {
+ /**
+ * 远程上报滑动窗口配置
+ */
+ private SlidingWindowConfig reportSlidingWindow = new SlidingWindowConfig();
+ }
+
+ @Data
+ public static class RpcServerProperties {
+
+ private int maxInboundMessageSize = 10 * 1024 * 1024;
+
+ private Duration keepAliveTime = Duration.of(2, ChronoUnit.HOURS);
+
+ private Duration keepAliveTimeout = Duration.of(20, ChronoUnit.SECONDS);
+
+ private Duration permitKeepAliveTime = Duration.of(5, ChronoUnit.MINUTES);
+
+ private ThreadPoolConfig dispatcherTp = new ThreadPoolConfig(16, 16, 1, TimeUnit.SECONDS , 10000);
+
+ }
+
+ @Data
+ public static class RpcClientProperties {
+
+ private int maxInboundMessageSize = 10 * 1024 * 1024;
+
+ private Duration keepAliveTime = Duration.of(2, ChronoUnit.HOURS);
+
+ private Duration keepAliveTimeout = Duration.of(20, ChronoUnit.SECONDS);
+
+ private Duration permitKeepAliveTime = Duration.of(5, ChronoUnit.MINUTES);
+
+ private ThreadPoolConfig clientTp = new ThreadPoolConfig(16, 16, 1, TimeUnit.SECONDS , 10000);
+
+ }
+
+ @Data
+ @AllArgsConstructor
+ @NoArgsConstructor
+ public static class ThreadPoolConfig {
/**
* 核心线程池
@@ -161,7 +215,7 @@ public class SnailJobProperties {
/**
* 线程存活时间
*/
- private long keepAliveTime;
+ private long keepAliveTime = 1;
/**
* 线程存活时间(单位)
@@ -173,13 +227,4 @@ public class SnailJobProperties {
*/
private int queueCapacity = 10000;
}
-
- @Data
- public static class Retry {
- /**
- * 远程上报滑动窗口配置
- */
- private SlidingWindowConfig reportSlidingWindow = new SlidingWindowConfig();
- }
-
}
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
index b5056c304..c4843157d 100644
--- 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
@@ -5,7 +5,7 @@ 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.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.log.SnailJobLog;
import org.springframework.stereotype.Component;
@@ -26,7 +26,7 @@ public class ClientRegister implements Lifecycle {
public static final int REGISTER_TIME = 10;
static {
- CLIENT = RequestBuilder.newBuilder()
+ CLIENT = RequestBuilder.newBuilder()
.client(NettyClient.class)
.callback(
nettyResult -> {
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/handler/SyncRemoteConfig.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/handler/SyncRemoteConfig.java
index 6cd213327..5c0742a1a 100644
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/handler/SyncRemoteConfig.java
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/handler/SyncRemoteConfig.java
@@ -4,7 +4,7 @@ import com.aizuda.snailjob.client.common.Lifecycle;
import com.aizuda.snailjob.client.common.NettyClient;
import com.aizuda.snailjob.client.common.cache.GroupVersionCache;
import com.aizuda.snailjob.client.common.rpc.client.RequestBuilder;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.log.SnailJobLog;
import com.aizuda.snailjob.server.model.dto.ConfigDTO;
@@ -31,7 +31,7 @@ public class SyncRemoteConfig implements Lifecycle {
SCHEDULE_EXECUTOR.scheduleAtFixedRate(() -> {
try {
- NettyClient client = RequestBuilder.newBuilder()
+ NettyClient client = RequestBuilder.newBuilder()
.client(NettyClient.class)
.timeout(1000L)
.callback(nettyResult -> {
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/log/report/ReportLogListener.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/log/report/ReportLogListener.java
index 944ee5fff..560c07c10 100644
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/log/report/ReportLogListener.java
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/log/report/ReportLogListener.java
@@ -2,7 +2,7 @@ package com.aizuda.snailjob.client.common.log.report;
import com.aizuda.snailjob.client.common.NettyClient;
import com.aizuda.snailjob.client.common.rpc.client.RequestBuilder;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.window.Listener;
import com.aizuda.snailjob.common.log.SnailJobLog;
import com.aizuda.snailjob.server.model.dto.LogTaskDTO;
@@ -20,7 +20,7 @@ import java.util.List;
@Slf4j
public class ReportLogListener implements Listener {
- private static final NettyClient CLIENT = RequestBuilder.newBuilder()
+ private static final NettyClient CLIENT = RequestBuilder.newBuilder()
.client(NettyClient.class)
.callback(nettyResult -> SnailJobLog.LOCAL.info("Data report log successfully requestId:[{}]", nettyResult.getReqId())).build();
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcChannel.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcChannel.java
index f1c47b6e0..18c19af89 100644
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcChannel.java
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcChannel.java
@@ -136,7 +136,7 @@ public final class GrpcChannel {
}
- public static ListenableFuture sendOfUnary(String path, String body) {
+ public static ListenableFuture sendOfUnary(String path, String body, final long reqId) {
if (channel == null) {
return null;
}
@@ -176,6 +176,7 @@ public final class GrpcChannel {
GrpcSnailJobRequest snailJobRequest = GrpcSnailJobRequest
.newBuilder()
.setMetadata(metadata)
+ .setReqId(reqId)
.setBody(build)
.build();
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcClient.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcClient.java
deleted file mode 100644
index 89317315b..000000000
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcClient.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.aizuda.snailjob.client.common.rpc.client;
-
-import com.aizuda.snailjob.client.common.Lifecycle;
-import com.aizuda.snailjob.client.common.config.SnailJobProperties;
-import com.aizuda.snailjob.client.common.config.SnailJobProperties.ServerConfig;
-import io.grpc.ManagedChannel;
-import io.grpc.ManagedChannelBuilder;
-import lombok.RequiredArgsConstructor;
-import org.springframework.core.Ordered;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-/**
- * @author: opensnail
- * @date : 2024-08-22
- */
-@Component
-@RequiredArgsConstructor
-@Order(Ordered.HIGHEST_PRECEDENCE)
-public class GrpcClient implements Lifecycle {
- private final SnailJobProperties snailJobProperties;
- @Override
- public void start() {
- // 创建 gRPC 频道
- ServerConfig server = snailJobProperties.getServer();
- ManagedChannel channel = ManagedChannelBuilder.forAddress(server.getHost(), server.getPort())
- .usePlaintext()
- .build();
- GrpcChannel.setChannel(channel);
- }
-
- @Override
- public void close() {
-
- }
-}
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcClient2.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcClient2.java
deleted file mode 100644
index c44400999..000000000
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcClient2.java
+++ /dev/null
@@ -1,89 +0,0 @@
-//package com.aizuda.snailjob.client.common.rpc.client;
-//
-//import com.aizuda.snailjob.common.core.grpc.auto.GrpcResult;
-//import com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest;
-//import com.aizuda.snailjob.common.core.grpc.auto.Metadata;
-//import com.google.common.util.concurrent.FutureCallback;
-//import com.google.common.util.concurrent.Futures;
-//import com.google.common.util.concurrent.ListenableFuture;
-//import com.google.protobuf.Any;
-//import com.google.protobuf.UnsafeByteOperations;
-//import io.grpc.Channel;
-//import io.grpc.ManagedChannel;
-//import io.grpc.ManagedChannelBuilder;
-//import io.grpc.MethodDescriptor;
-//import io.grpc.protobuf.ProtoUtils;
-//
-//import java.util.concurrent.LinkedBlockingDeque;
-//import java.util.concurrent.ScheduledThreadPoolExecutor;
-//import java.util.concurrent.ThreadPoolExecutor;
-//import java.util.concurrent.TimeUnit;
-//
-///**
-// * @author: shuguang.zhang
-// * @date : 2024-08-21
-// */
-//public class GrpcClient2 {
-// private final Channel channel;
-//
-// public GrpcClient2(Channel channel) {
-// this.channel = channel;
-// }
-//
-// public static void main(String[] args) {
-// // 创建 gRPC 频道
-// ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 1788)
-// .usePlaintext()
-// .build();
-//
-// // 实例化客户端
-// GrpcClient2 grpcClient = new GrpcClient2(channel);
-//
-// String s = "zsg";
-// Any build = Any.newBuilder().setValue(UnsafeByteOperations.unsafeWrap(s.getBytes())).build();
-// // 构造请求对象
-// Metadata metadata = Metadata
-// .newBuilder()
-// .setClientIp("11")
-// .setType("1")
-// .putHeaders("aa", "bb")
-// .build();
-// GrpcSnailJobRequest request = GrpcSnailJobRequest.newBuilder().setMetadata(metadata).setBody(build).build();
-//
-// // 动态调用方法并获取响应 "UnaryRequest", "unaryRequest",
-// ListenableFuture future = grpcClient.invokeMethod("unaryRequest", request);
-// ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1);
-// ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2,2,1,TimeUnit.SECONDS, new LinkedBlockingDeque<>());
-//// System.out.println("Response: " + response.getMessage());
-// Futures.addCallback(future, new FutureCallback() {
-// @Override
-// public void onSuccess(final GrpcResult result) {
-// System.out.println(result);
-// }
-//
-// @Override
-// public void onFailure(final Throwable t) {
-// System.out.println(t);
-// }
-// }, threadPoolExecutor);
-//
-// Futures.withTimeout(future, 5, TimeUnit.SECONDS, scheduledThreadPoolExecutor);
-// // 关闭频道
-// channel.shutdown();
-// }
-//
-// public ListenableFuture invokeMethod(String methodName, GrpcSnailJobRequest request) {
-// MethodDescriptor methodDescriptor =
-// MethodDescriptor.newBuilder()
-// .setType(MethodDescriptor.MethodType.UNARY)
-// .setFullMethodName(MethodDescriptor.generateFullMethodName("UnaryRequest", methodName))
-// .setRequestMarshaller(ProtoUtils.marshaller(GrpcSnailJobRequest.getDefaultInstance()))
-// .setResponseMarshaller(ProtoUtils.marshaller(GrpcResult.getDefaultInstance()))
-// .build();
-//
-// // 创建动态代理调用方法
-// return io.grpc.stub.ClientCalls.futureUnaryCall(
-// channel.newCall(methodDescriptor, io.grpc.CallOptions.DEFAULT),
-// request);
-// }
-//}
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcClientInvokeHandler.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcClientInvokeHandler.java
index 1c83041cd..65851162d 100644
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcClientInvokeHandler.java
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/GrpcClientInvokeHandler.java
@@ -2,13 +2,14 @@ package com.aizuda.snailjob.client.common.rpc.client;
import cn.hutool.core.date.StopWatch;
import com.aizuda.snailjob.client.common.annotation.Mapping;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties.RpcClientProperties;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties.ThreadPoolConfig;
import com.aizuda.snailjob.client.common.exception.SnailJobClientTimeOutException;
-import com.aizuda.snailjob.common.core.enums.HeadersEnum;
+import com.aizuda.snailjob.common.core.context.SnailSpringContext;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
import com.aizuda.snailjob.common.core.grpc.auto.GrpcResult;
-import com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest;
-import com.aizuda.snailjob.common.core.grpc.auto.Metadata;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.model.Result;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.log.SnailJobLog;
@@ -16,21 +17,20 @@ import com.fasterxml.jackson.databind.util.ByteBufferBackedInputStream;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
-import com.google.protobuf.Any;
-import com.google.protobuf.UnsafeByteOperations;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.nio.ByteBuffer;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Consumer;
/**
@@ -41,12 +41,17 @@ import java.util.function.Consumer;
* @since 1.3.0
*/
public class GrpcClientInvokeHandler> implements InvocationHandler {
+
+ public static final AtomicLong REQUEST_ID = new AtomicLong(0);
private final Consumer consumer;
private final boolean async;
private final long timeout;
private final TimeUnit unit;
- private static final ExecutorService executorService = Executors.newFixedThreadPool(10);
- private static final ScheduledThreadPoolExecutor schedule = new ScheduledThreadPoolExecutor(1);
+
+ private static final ExecutorService executorService = createGrpcExecutor();
+
+ private static final ScheduledThreadPoolExecutor schedule = new ScheduledThreadPoolExecutor(1);
+
public GrpcClientInvokeHandler(boolean async, long timeout, TimeUnit unit, Consumer consumer) {
this.consumer = consumer;
this.async = async;
@@ -59,8 +64,10 @@ public class GrpcClientInvokeHandler> implements Invoca
StopWatch sw = new StopWatch();
Mapping annotation = method.getAnnotation(Mapping.class);
- ListenableFuture future = GrpcChannel.sendOfUnary(annotation.path(), JsonUtil.toJsonString(args));
- SnailJobLog.LOCAL.debug("request complete requestId:[{}] 耗时:[{}ms]", sw.getTotalTimeMillis());
+ long reqId = newId();
+ ListenableFuture future = GrpcChannel.sendOfUnary(annotation.path(), JsonUtil.toJsonString(args),
+ reqId);
+ SnailJobLog.LOCAL.debug("request complete requestId:[{}] 耗时:[{}ms]", sw.getTotalTimeMillis(), reqId);
if (async) {
if (future == null) {
@@ -74,12 +81,13 @@ public class GrpcClientInvokeHandler> implements Invoca
ByteBuffer byteBuffer = result.getData().getValue().asReadOnlyByteBuffer();
String str = JsonUtil.parseObject(new ByteBufferBackedInputStream(byteBuffer), String.class);
- consumer.accept((R) new NettyResult(result.getStatus(), result.getMessage(), str, 0));
+ consumer.accept(
+ (R) new SnailJobRpcResult(result.getStatus(), result.getMessage(), str, result.getReqId()));
}
@Override
public void onFailure(final Throwable t) {
- consumer.accept((R) new NettyResult(StatusEnum.NO.getStatus(), t.getMessage(), null, 1));
+ consumer.accept((R) new SnailJobRpcResult(StatusEnum.NO.getStatus(), t.getMessage(), null, reqId));
}
}, executorService);
@@ -95,10 +103,29 @@ public class GrpcClientInvokeHandler> implements Invoca
} catch (ExecutionException e) {
throw e.getCause();
} catch (TimeoutException e) {
- throw new SnailJobClientTimeOutException("Request to remote interface timed out. path:[{}]", annotation.path());
+ throw new SnailJobClientTimeOutException("Request to remote interface timed out. path:[{}]",
+ annotation.path());
}
}
}
+ private static long newId() {
+ return REQUEST_ID.getAndIncrement();
+ }
+
+ protected static ThreadPoolExecutor createGrpcExecutor() {
+ SnailJobProperties snailJobProperties = SnailSpringContext.getBean(SnailJobProperties.class);
+ RpcClientProperties clientRpc = snailJobProperties.getClientRpc();
+ String serverIp = GrpcChannel.getServerHost().replaceAll("%", "-");
+ ThreadPoolConfig threadPool = clientRpc.getClientTp();
+ ThreadPoolExecutor grpcExecutor = new ThreadPoolExecutor(threadPool.getCorePoolSize(),
+ threadPool.getMaximumPoolSize(), threadPool.getKeepAliveTime(), TimeUnit.MILLISECONDS,
+ new LinkedBlockingQueue<>(threadPool.getQueueCapacity()),
+ new ThreadFactoryBuilder().setDaemon(true)
+ .setNameFormat("snail-job-grpc-client-executor-" + serverIp + "-%d")
+ .build());
+ grpcExecutor.allowCoreThreadTimeOut(true);
+ return grpcExecutor;
+ }
}
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 dd7210838..3155bf6bb 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
@@ -6,6 +6,7 @@ import com.aizuda.snailjob.common.core.constant.SystemConstants.BEAT;
import com.aizuda.snailjob.common.core.context.SnailSpringContext;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.rpc.RpcContext;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.log.SnailJobLog;
@@ -43,8 +44,8 @@ public class NettyHttpClientHandler extends SimpleChannelInboundHandler> {
throw new SnailJobClientException("class not found exception to: [{}]", clintInterface.getName());
}
-// RpcClientInvokeHandler rpcClientInvokeHandler = new RpcClientInvokeHandler<>(async, timeout, unit, callback);
- GrpcClientInvokeHandler invokeHandler = new GrpcClientInvokeHandler(async, timeout, unit, callback);
+ InvocationHandler invocationHandler;
+ SnailJobProperties properties = SnailSpringContext.getBean(SnailJobProperties.class);
+ RpcTypeEnum rpcType = properties.getRpcType();
+ if (Objects.isNull(rpcType) || RpcTypeEnum.NETTY == rpcType) {
+ invocationHandler= new RpcClientInvokeHandler<>(async, timeout, unit,
+ callback);
+ } else {
+ invocationHandler = new GrpcClientInvokeHandler<>(async, timeout, unit, callback);
+ }
+
return (T) Proxy.newProxyInstance(clintInterface.getClassLoader(),
- new Class[]{clintInterface}, invokeHandler);
+ new Class[]{clintInterface}, invocationHandler);
}
}
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/RpcClientInvokeHandler.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/RpcClientInvokeHandler.java
index 914efba24..cdd7f1c77 100644
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/RpcClientInvokeHandler.java
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/RpcClientInvokeHandler.java
@@ -6,7 +6,7 @@ import com.aizuda.snailjob.client.common.annotation.Mapping;
import com.aizuda.snailjob.client.common.exception.SnailJobClientException;
import com.aizuda.snailjob.client.common.exception.SnailJobClientTimeOutException;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.model.Result;
import com.aizuda.snailjob.common.core.model.SnailJobRequest;
import com.aizuda.snailjob.common.core.rpc.RpcContext;
@@ -67,7 +67,7 @@ public class RpcClientInvokeHandler> implements Invocat
newFuture.whenComplete((r, t) -> {
if (Objects.nonNull(t)) {
consumer.accept(
- (R) new NettyResult(StatusEnum.NO.getStatus(), t.getMessage(), null, snailJobRequest.getReqId()));
+ (R) new SnailJobRpcResult(StatusEnum.NO.getStatus(), t.getMessage(), null, snailJobRequest.getReqId()));
} else {
consumer.accept(r);
}
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/SnailJobGrpcClient.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/SnailJobGrpcClient.java
new file mode 100644
index 000000000..666bf460e
--- /dev/null
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/SnailJobGrpcClient.java
@@ -0,0 +1,74 @@
+package com.aizuda.snailjob.client.common.rpc.client;
+
+import com.aizuda.snailjob.client.common.Lifecycle;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties.RpcClientProperties;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties.ThreadPoolConfig;
+import com.aizuda.snailjob.common.core.enums.RpcTypeEnum;
+import com.aizuda.snailjob.common.log.SnailJobLog;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import io.grpc.DecompressorRegistry;
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+import lombok.RequiredArgsConstructor;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author: opensnail
+ * @date : 2024-08-22
+ */
+@Component
+@RequiredArgsConstructor
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class SnailJobGrpcClient implements Lifecycle {
+ private ManagedChannel channel;
+ private final SnailJobProperties snailJobProperties;
+
+ @Override
+ public void start() {
+ if (RpcTypeEnum.GPRC != snailJobProperties.getRpcType()) {
+ return;
+ }
+
+ RpcClientProperties clientRpc = snailJobProperties.getClientRpc();
+ // 创建 gRPC 频道
+ String serverHost = GrpcChannel.getServerHost();
+ channel = ManagedChannelBuilder.forAddress(serverHost, GrpcChannel.getServerPort())
+ .executor(createGrpcExecutor(serverHost))
+ .decompressorRegistry(DecompressorRegistry.getDefaultInstance())
+ .maxInboundMessageSize(clientRpc.getMaxInboundMessageSize())
+ .keepAliveTime(clientRpc.getKeepAliveTime().toMillis(), TimeUnit.MILLISECONDS)
+ .keepAliveTimeout(clientRpc.getKeepAliveTimeout().toMillis(), TimeUnit.MILLISECONDS)
+ .usePlaintext()
+ .build();
+ GrpcChannel.setChannel(channel);
+ SnailJobLog.LOCAL.info("grpc client started connect to server");
+
+ }
+
+ @Override
+ public void close() {
+ if (channel != null && !channel.isShutdown()) {
+ channel.shutdownNow();
+ }
+ }
+
+ private ThreadPoolExecutor createGrpcExecutor(String serverIp) {
+ RpcClientProperties clientRpc = snailJobProperties.getClientRpc();
+ ThreadPoolConfig threadPool = clientRpc.getClientTp();
+ serverIp = serverIp.replaceAll("%", "-");
+ ThreadPoolExecutor grpcExecutor = new ThreadPoolExecutor(threadPool.getCorePoolSize(),
+ threadPool.getMaximumPoolSize(), threadPool.getKeepAliveTime(), TimeUnit.MILLISECONDS,
+ new LinkedBlockingQueue<>(threadPool.getQueueCapacity()),
+ new ThreadFactoryBuilder().setDaemon(true).setNameFormat("snail-job-grpc-client-executor-" + serverIp + "-%d")
+ .build());
+ grpcExecutor.allowCoreThreadTimeOut(true);
+ return grpcExecutor;
+ }
+}
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/GrpcInterceptor.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/GrpcInterceptor.java
index e02b2b2a6..b44174557 100644
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/GrpcInterceptor.java
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/GrpcInterceptor.java
@@ -1,7 +1,5 @@
package com.aizuda.snailjob.client.common.rpc.server;
-import io.grpc.Context;
-import io.grpc.Contexts;
import io.grpc.Metadata;
import io.grpc.ServerCall;
import io.grpc.ServerCall.Listener;
@@ -21,10 +19,9 @@ public class GrpcInterceptor implements ServerInterceptor {
final ServerCallHandler serverCallHandler) {
String fullMethodName = serverCall.getMethodDescriptor().getFullMethodName();
long start = System.currentTimeMillis();
- Context context = Context.current();
try {
- return Contexts.interceptCall(context, serverCall, metadata, serverCallHandler);
+ return serverCallHandler.startCall(serverCall, metadata);
} finally {
log.info("method invoked: {} cast:{}ms", fullMethodName, System.currentTimeMillis() - start);
}
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/GrpcServerConsumerConfig.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/GrpcServerConsumerConfig.java
deleted file mode 100644
index 5b7069230..000000000
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/GrpcServerConsumerConfig.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.aizuda.snailjob.client.common.rpc.server;
-
-import com.aizuda.snailjob.client.common.config.SnailJobProperties;
-import com.aizuda.snailjob.client.common.config.SnailJobProperties.DispatcherThreadPool;
-import com.aizuda.snailjob.client.common.rpc.supports.handler.SnailDispatcherRequestHandler;
-import com.aizuda.snailjob.client.common.rpc.supports.handler.UnaryRequestHandler;
-import com.aizuda.snailjob.common.core.grpc.auto.GrpcResult;
-import com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest;
-import io.grpc.MethodDescriptor;
-import io.grpc.ServerBuilder;
-import io.grpc.ServerCallHandler;
-import io.grpc.ServerServiceDefinition;
-import io.grpc.protobuf.ProtoUtils;
-import io.grpc.stub.ServerCalls;
-import lombok.RequiredArgsConstructor;
-import net.devh.boot.grpc.server.serverfactory.GrpcServerConfigurer;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
-
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-
-@Configuration
-@RequiredArgsConstructor
-public class GrpcServerConsumerConfig implements GrpcServerConfigurer {
- private final SnailDispatcherRequestHandler handler;
- private final SnailJobProperties snailJobProperties;
-
- @Override
- public void accept(ServerBuilder> serverBuilder) {
- DispatcherThreadPool threadPool = snailJobProperties.getDispatcherThreadPool();
- ThreadPoolExecutor dispatcherThreadPool = new ThreadPoolExecutor(
- threadPool.getCorePoolSize(), threadPool.getMaximumPoolSize(), threadPool.getKeepAliveTime(),
- threadPool.getTimeUnit(), new LinkedBlockingQueue<>(threadPool.getQueueCapacity()),
- new CustomizableThreadFactory("snail-grpc-server-"));
-
- // 创建服务定义
- ServerServiceDefinition serviceDefinition = createServiceDefinition(
- "UnaryRequest", "unaryRequest",
- new UnaryRequestHandler(dispatcherThreadPool, handler));
- serverBuilder.addService(serviceDefinition);
- serverBuilder.intercept(new GrpcInterceptor());
- }
-
- public static ServerServiceDefinition createServiceDefinition(
- String serviceName,
- String methodName,
- ServerCalls.UnaryMethod unaryMethod) {
-
- MethodDescriptor methodDescriptor =
- MethodDescriptor.newBuilder()
- .setType(MethodDescriptor.MethodType.UNARY)
- .setFullMethodName(MethodDescriptor.generateFullMethodName(serviceName, methodName))
- .setRequestMarshaller(ProtoUtils.marshaller(GrpcSnailJobRequest.getDefaultInstance()))
- .setResponseMarshaller(ProtoUtils.marshaller(GrpcResult.getDefaultInstance()))
- .build();
-
- ServerCallHandler callHandler = ServerCalls.asyncUnaryCall(unaryMethod);
-
- return ServerServiceDefinition.builder(serviceName)
- .addMethod(methodDescriptor, callHandler)
- .build();
- }
-}
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/SnailGrpcServer.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/SnailGrpcServer.java
new file mode 100644
index 000000000..b1aed440c
--- /dev/null
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/SnailGrpcServer.java
@@ -0,0 +1,136 @@
+package com.aizuda.snailjob.client.common.rpc.server;
+
+import com.aizuda.snailjob.client.common.Lifecycle;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties.RpcServerProperties;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties.ThreadPoolConfig;
+import com.aizuda.snailjob.client.common.exception.SnailJobClientException;
+import com.aizuda.snailjob.client.common.rpc.supports.handler.SnailDispatcherRequestHandler;
+import com.aizuda.snailjob.client.common.rpc.supports.handler.UnaryRequestHandler;
+import com.aizuda.snailjob.common.core.constant.GrpcServerConstants;
+import com.aizuda.snailjob.common.core.enums.RpcTypeEnum;
+import com.aizuda.snailjob.common.core.grpc.auto.GrpcResult;
+import com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest;
+import com.aizuda.snailjob.common.log.SnailJobLog;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import io.grpc.CompressorRegistry;
+import io.grpc.DecompressorRegistry;
+import io.grpc.MethodDescriptor;
+import io.grpc.Server;
+import io.grpc.ServerInterceptor;
+import io.grpc.ServerInterceptors;
+import io.grpc.ServerServiceDefinition;
+import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder;
+import io.grpc.protobuf.ProtoUtils;
+import io.grpc.stub.ServerCalls;
+import io.grpc.util.MutableHandlerRegistry;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.time.Duration;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Grpc server
+ *
+ * @author: opensnail
+ * @date : 2024-04-12 23:03
+ * @since 3.3.0
+ */
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
+@RequiredArgsConstructor
+@Getter
+public class SnailGrpcServer implements Lifecycle {
+ private final SnailJobProperties snailJobProperties;
+ private final SnailDispatcherRequestHandler snailDispatcherRequestHandler;
+ private volatile boolean started = false;
+ private Server server;
+
+ @Override
+ public void start() {
+ if (started || RpcTypeEnum.GPRC != snailJobProperties.getRpcType()) {
+ return;
+ }
+
+ RpcServerProperties grpc = snailJobProperties.getServerRpc();
+
+ final MutableHandlerRegistry handlerRegistry = new MutableHandlerRegistry();
+ addServices(handlerRegistry, new GrpcInterceptor());
+ NettyServerBuilder builder = NettyServerBuilder.forPort(snailJobProperties.getPort())
+ .executor(createGrpcExecutor(grpc.getDispatcherTp()));
+
+ Duration keepAliveTime = grpc.getKeepAliveTime();
+ Duration keepAliveTimeOut = grpc.getKeepAliveTimeout();
+ Duration permitKeepAliveTime = grpc.getPermitKeepAliveTime();
+
+ server = builder.maxInboundMessageSize(grpc.getMaxInboundMessageSize()).fallbackHandlerRegistry(handlerRegistry)
+ .compressorRegistry(CompressorRegistry.getDefaultInstance())
+ .decompressorRegistry(DecompressorRegistry.getDefaultInstance())
+ .keepAliveTime(keepAliveTime.toMillis(), TimeUnit.MILLISECONDS)
+ .keepAliveTimeout(keepAliveTimeOut.toMillis(), TimeUnit.MILLISECONDS)
+ .permitKeepAliveTime(permitKeepAliveTime.toMillis(), TimeUnit.MILLISECONDS)
+ .build();
+ try {
+ server.start();
+ this.started = true;
+ SnailJobLog.LOCAL.info("------> snail-job remoting server start success, grpc = {}, port = {}",
+ SnailGrpcServer.class.getName(), snailJobProperties.getPort());
+ } catch (IOException e) {
+ SnailJobLog.LOCAL.error("--------> snail-job remoting server error.", e);
+ started = false;
+ throw new SnailJobClientException("snail-job server start error");
+ }
+ }
+
+ @Override
+ public void close() {
+ if (server != null) {
+ server.shutdownNow();
+ }
+ }
+
+ private void addServices(MutableHandlerRegistry handlerRegistry, ServerInterceptor... serverInterceptor) {
+
+ // 创建服务UNARY类型定义
+ ServerServiceDefinition serviceDefinition = createUnaryServiceDefinition(
+ GrpcServerConstants.UNARY_SERVICE_NAME, GrpcServerConstants.UNARY_METHOD_NAME,
+ new UnaryRequestHandler(snailJobProperties.getServerRpc().getDispatcherTp(), snailDispatcherRequestHandler));
+ handlerRegistry.addService(serviceDefinition);
+ handlerRegistry.addService(ServerInterceptors.intercept(serviceDefinition, serverInterceptor));
+ }
+
+ public static ServerServiceDefinition createUnaryServiceDefinition(
+ String serviceName,
+ String methodName,
+ ServerCalls.UnaryMethod unaryMethod) {
+
+ MethodDescriptor methodDescriptor =
+ MethodDescriptor.newBuilder()
+ .setType(MethodDescriptor.MethodType.UNARY)
+ .setFullMethodName(MethodDescriptor.generateFullMethodName(serviceName, methodName))
+ .setRequestMarshaller(ProtoUtils.marshaller(GrpcSnailJobRequest.getDefaultInstance()))
+ .setResponseMarshaller(ProtoUtils.marshaller(GrpcResult.getDefaultInstance()))
+ .build();
+
+ return ServerServiceDefinition.builder(serviceName)
+ .addMethod(methodDescriptor, ServerCalls.asyncUnaryCall(unaryMethod))
+ .build();
+ }
+
+ private ThreadPoolExecutor createGrpcExecutor(final ThreadPoolConfig threadPool) {
+ ThreadPoolExecutor grpcExecutor = new ThreadPoolExecutor(threadPool.getCorePoolSize(),
+ threadPool.getMaximumPoolSize(), threadPool.getKeepAliveTime(), TimeUnit.MILLISECONDS,
+ new LinkedBlockingQueue<>(threadPool.getQueueCapacity()),
+ new ThreadFactoryBuilder().setDaemon(true).setNameFormat("snail-job-grpc-server-executor-%d")
+ .build());
+ grpcExecutor.allowCoreThreadTimeOut(true);
+ return grpcExecutor;
+ }
+}
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/SnailNettyHttpServer.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/SnailNettyHttpServer.java
index d9260a1c3..155b66532 100644
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/SnailNettyHttpServer.java
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/server/SnailNettyHttpServer.java
@@ -7,6 +7,7 @@ import com.aizuda.snailjob.client.common.exception.SnailJobClientException;
import com.aizuda.snailjob.client.common.rpc.supports.handler.NettyHttpServerHandler;
import com.aizuda.snailjob.client.common.rpc.supports.handler.SnailDispatcherRequestHandler;
import com.aizuda.snailjob.common.core.context.SnailSpringContext;
+import com.aizuda.snailjob.common.core.enums.RpcTypeEnum;
import com.aizuda.snailjob.common.log.SnailJobLog;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
@@ -95,6 +96,10 @@ public class SnailNettyHttpServer implements Runnable, Lifecycle {
@Override
public void start() {
+ if (RpcTypeEnum.NETTY != snailJobProperties.getRpcType()) {
+ return;
+ }
+
thread = new Thread(this);
thread.setDaemon(true);
thread.start();
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/NettyHttpServerHandler.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/NettyHttpServerHandler.java
index 651fdb298..35b637bba 100644
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/NettyHttpServerHandler.java
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/NettyHttpServerHandler.java
@@ -1,10 +1,11 @@
package com.aizuda.snailjob.client.common.rpc.supports.handler;
import com.aizuda.snailjob.client.common.config.SnailJobProperties;
-import com.aizuda.snailjob.client.common.config.SnailJobProperties.DispatcherThreadPool;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties.RpcServerProperties;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties.ThreadPoolConfig;
import com.aizuda.snailjob.client.common.rpc.supports.http.HttpResponse;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.model.SnailJobRequest;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import io.netty.buffer.Unpooled;
@@ -35,8 +36,8 @@ public class NettyHttpServerHandler extends SimpleChannelInboundHandler(threadPool.getQueueCapacity()),
@@ -68,17 +69,17 @@ public class NettyHttpServerHandler extends SimpleChannelInboundHandler {
- NettyResult nettyResult = null;
+ SnailJobRpcResult snailJobRpcResult = null;
try {
- nettyResult = dispatcher.dispatch(nettyHttpRequest);
+ snailJobRpcResult = dispatcher.dispatch(nettyHttpRequest);
} catch (Exception e) {
SnailJobRequest retryRequest = JsonUtil.parseObject(content, SnailJobRequest.class);
- nettyResult = new NettyResult(StatusEnum.NO.getStatus(), e.getMessage(), null, retryRequest.getReqId());
+ snailJobRpcResult = new SnailJobRpcResult(StatusEnum.NO.getStatus(), e.getMessage(), null, retryRequest.getReqId());
} finally {
writeResponse(channelHandlerContext,
HttpUtil.isKeepAlive(fullHttpRequest),
nettyHttpRequest.getHttpResponse(),
- JsonUtil.toJsonString(nettyResult)
+ JsonUtil.toJsonString(snailJobRpcResult)
);
}
});
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/SnailDispatcherRequestHandler.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/SnailDispatcherRequestHandler.java
index fa94babb7..91d776ab4 100644
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/SnailDispatcherRequestHandler.java
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/SnailDispatcherRequestHandler.java
@@ -15,7 +15,7 @@ import com.aizuda.snailjob.common.core.constant.SystemConstants;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
import com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest;
import com.aizuda.snailjob.common.core.grpc.auto.Metadata;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.model.Result;
import com.aizuda.snailjob.common.core.model.SnailJobRequest;
import com.aizuda.snailjob.common.core.util.JsonUtil;
@@ -46,9 +46,9 @@ import java.util.stream.Collectors;
public class SnailDispatcherRequestHandler {
private final SnailJobProperties snailJobProperties;
- public NettyResult dispatch(NettyHttpRequest request) {
+ public SnailJobRpcResult dispatch(NettyHttpRequest request) {
- NettyResult nettyResult = new NettyResult();
+ SnailJobRpcResult snailJobRpcResult = new SnailJobRpcResult();
List handlerInterceptors = handlerInterceptors();
SnailJobRequest retryRequest = JsonUtil.parseObject(request.getContent(), SnailJobRequest.class);
@@ -81,7 +81,7 @@ public class SnailDispatcherRequestHandler {
for (final HandlerInterceptor handlerInterceptor : handlerInterceptors) {
if (!handlerInterceptor.preHandle(httpRequest, httpResponse, endPointInfo)) {
- return nettyResult;
+ return snailJobRpcResult;
}
}
@@ -98,12 +98,12 @@ public class SnailDispatcherRequestHandler {
}
} catch (Exception ex) {
SnailJobLog.LOCAL.error("http request error. [{}]", request.getContent(), ex);
- nettyResult.setMessage(ex.getMessage()).setStatus(StatusEnum.NO.getStatus());
+ snailJobRpcResult.setMessage(ex.getMessage()).setStatus(StatusEnum.NO.getStatus());
e = ex;
} finally {
- nettyResult.setReqId(retryRequest.getReqId());
+ snailJobRpcResult.setReqId(retryRequest.getReqId());
if (Objects.nonNull(resultObj)) {
- nettyResult.setData(resultObj.getData())
+ snailJobRpcResult.setData(resultObj.getData())
.setMessage(resultObj.getMessage())
.setStatus(resultObj.getStatus());
}
@@ -113,11 +113,11 @@ public class SnailDispatcherRequestHandler {
}
}
- return nettyResult;
+ return snailJobRpcResult;
}
- public NettyResult dispatch(GrpcRequest request) {
- NettyResult nettyResult = new NettyResult();
+ public SnailJobRpcResult dispatch(GrpcRequest request) {
+ SnailJobRpcResult snailJobRpcResult = new SnailJobRpcResult();
HttpRequest httpRequest = request.getHttpRequest();
HttpResponse httpResponse = request.getHttpResponse();
@@ -155,7 +155,7 @@ public class SnailDispatcherRequestHandler {
for (final HandlerInterceptor handlerInterceptor : handlerInterceptors) {
if (!handlerInterceptor.preHandle(httpRequest, httpResponse, endPointInfo)) {
- return nettyResult;
+ return snailJobRpcResult;
}
}
@@ -172,12 +172,12 @@ public class SnailDispatcherRequestHandler {
}
} catch (Exception ex) {
SnailJobLog.LOCAL.error("http request error. [{}]", snailJobRequest, ex);
- nettyResult.setMessage(ex.getMessage()).setStatus(StatusEnum.NO.getStatus());
+ snailJobRpcResult.setMessage(ex.getMessage()).setStatus(StatusEnum.NO.getStatus());
e = ex;
} finally {
- nettyResult.setReqId(0);
+ snailJobRpcResult.setReqId(0);
if (Objects.nonNull(resultObj)) {
- nettyResult.setData(resultObj.getData())
+ snailJobRpcResult.setData(resultObj.getData())
.setMessage(resultObj.getMessage())
.setStatus(resultObj.getStatus());
}
@@ -187,7 +187,7 @@ public class SnailDispatcherRequestHandler {
}
}
- return nettyResult;
+ return snailJobRpcResult;
}
private static List handlerInterceptors() {
diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/UnaryRequestHandler.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/UnaryRequestHandler.java
index bc4dc22a2..f92a52c63 100644
--- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/UnaryRequestHandler.java
+++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/supports/handler/UnaryRequestHandler.java
@@ -1,37 +1,43 @@
package com.aizuda.snailjob.client.common.rpc.supports.handler;
import cn.hutool.core.util.StrUtil;
+import com.aizuda.snailjob.client.common.config.SnailJobProperties.ThreadPoolConfig;
import com.aizuda.snailjob.client.common.rpc.supports.http.HttpRequest;
import com.aizuda.snailjob.client.common.rpc.supports.http.HttpResponse;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
import com.aizuda.snailjob.common.core.grpc.auto.GrpcResult;
import com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest;
import com.aizuda.snailjob.common.core.grpc.auto.Metadata;
-import com.aizuda.snailjob.common.core.model.NettyResult;
-import com.aizuda.snailjob.common.core.model.SnailJobRequest;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.google.protobuf.Any;
import com.google.protobuf.UnsafeByteOperations;
import io.grpc.stub.ServerCalls;
import io.grpc.stub.StreamObserver;
-import io.netty.handler.codec.http.HttpUtil;
+import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
import java.util.Optional;
+import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
/**
* @author: opensnail
* @date : 2024-08-22
*/
-public class UnaryRequestHandler implements ServerCalls.UnaryMethod{
+public class UnaryRequestHandler implements ServerCalls.UnaryMethod {
- private final ThreadPoolExecutor threadPoolExecutor;
+ private final ThreadPoolExecutor dispatcherThreadPool;
private final SnailDispatcherRequestHandler dispatcher;
- public UnaryRequestHandler(final ThreadPoolExecutor dispatcherThreadPool,
+
+ public UnaryRequestHandler(final ThreadPoolConfig dispatcherThreadPool,
final SnailDispatcherRequestHandler handler) {
- this.threadPoolExecutor = dispatcherThreadPool;
this.dispatcher = handler;
+ this.dispatcherThreadPool = new ThreadPoolExecutor(
+ dispatcherThreadPool.getCorePoolSize(), dispatcherThreadPool.getMaximumPoolSize(),
+ dispatcherThreadPool.getKeepAliveTime(),
+ dispatcherThreadPool.getTimeUnit(), new LinkedBlockingQueue<>(dispatcherThreadPool.getQueueCapacity()),
+ new CustomizableThreadFactory("snail-grpc-server-"));
}
@Override
@@ -40,24 +46,25 @@ public class UnaryRequestHandler implements ServerCalls.UnaryMethod {
- NettyResult nettyResult = null;
+ dispatcherThreadPool.execute(() -> {
+ SnailJobRpcResult snailJobRpcResult = null;
try {
- nettyResult = dispatcher.dispatch(grpcRequest);
+ snailJobRpcResult = dispatcher.dispatch(grpcRequest);
} catch (Exception e) {
- nettyResult = new NettyResult(StatusEnum.NO.getStatus(), e.getMessage(), null, 0);
+ snailJobRpcResult = new SnailJobRpcResult(StatusEnum.NO.getStatus(), e.getMessage(), null, 0);
} finally {
GrpcResult grpcResult = GrpcResult.newBuilder()
- .setStatus(nettyResult.getStatus())
- .setMessage(Optional.ofNullable(nettyResult.getMessage()).orElse(StrUtil.EMPTY))
+ .setStatus(snailJobRpcResult.getStatus())
+ .setMessage(Optional.ofNullable(snailJobRpcResult.getMessage()).orElse(StrUtil.EMPTY))
.setData(Any.newBuilder()
- .setValue(UnsafeByteOperations.unsafeWrap(JsonUtil.toJsonString(nettyResult.getData()).getBytes()))
+ .setValue(UnsafeByteOperations.unsafeWrap(
+ JsonUtil.toJsonString(snailJobRpcResult.getData()).getBytes()))
.build())
.build();
diff --git a/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/JobExecutorFutureCallback.java b/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/JobExecutorFutureCallback.java
index dd10d2cf5..3fe62d68e 100644
--- a/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/JobExecutorFutureCallback.java
+++ b/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/JobExecutorFutureCallback.java
@@ -19,7 +19,7 @@ import com.aizuda.snailjob.common.core.enums.JobTaskStatusEnum;
import com.aizuda.snailjob.common.core.enums.JobTaskTypeEnum;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
import com.aizuda.snailjob.common.core.model.JobContext;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.util.EnvironmentUtils;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.core.util.NetUtil;
@@ -54,7 +54,7 @@ public class JobExecutorFutureCallback implements FutureCallback
> 异常:{} \s
\s""";
- private static final JobNettyClient CLIENT = RequestBuilder.newBuilder()
+ private static final JobNettyClient CLIENT = RequestBuilder.newBuilder()
.client(JobNettyClient.class)
.callback(nettyResult -> {
if (nettyResult.getStatus() == StatusEnum.NO.getStatus()) {
diff --git a/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/MapInvokeHandler.java b/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/MapInvokeHandler.java
index 2a05a4ea7..0c796a09b 100644
--- a/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/MapInvokeHandler.java
+++ b/snail-job-client/snail-job-client-job-core/src/main/java/com/aizuda/snailjob/client/job/core/executor/MapInvokeHandler.java
@@ -10,7 +10,7 @@ import com.aizuda.snailjob.common.core.constant.SystemConstants;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
import com.aizuda.snailjob.common.core.exception.SnailJobMapReduceException;
import com.aizuda.snailjob.common.core.model.JobContext;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.model.Result;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.log.SnailJobLog;
@@ -29,7 +29,7 @@ import java.util.Objects;
*/
public final class MapInvokeHandler implements InvocationHandler {
- private static final JobNettyClient CLIENT = RequestBuilder.newBuilder()
+ private static final JobNettyClient CLIENT = RequestBuilder.newBuilder()
.client(JobNettyClient.class)
.async(Boolean.FALSE)
.build();
diff --git a/snail-job-client/snail-job-client-retry-core/src/main/java/com/aizuda/snailjob/client/core/report/ReportListener.java b/snail-job-client/snail-job-client-retry-core/src/main/java/com/aizuda/snailjob/client/core/report/ReportListener.java
index b0e011219..da6dc6eec 100644
--- a/snail-job-client/snail-job-client-retry-core/src/main/java/com/aizuda/snailjob/client/core/report/ReportListener.java
+++ b/snail-job-client/snail-job-client-retry-core/src/main/java/com/aizuda/snailjob/client/core/report/ReportListener.java
@@ -11,7 +11,7 @@ import com.aizuda.snailjob.common.core.alarm.AlarmContext;
import com.aizuda.snailjob.common.core.alarm.SnailJobAlarmFactory;
import com.aizuda.snailjob.common.core.context.SnailSpringContext;
import com.aizuda.snailjob.common.core.enums.RetryNotifySceneEnum;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.util.EnvironmentUtils;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.core.util.NetUtil;
@@ -52,7 +52,7 @@ public class ReportListener implements Listener {
"> 时间:{} \n" +
"> 异常:{} \n";
- private static final NettyClient CLIENT = RequestBuilder.newBuilder()
+ private static final NettyClient CLIENT = RequestBuilder.newBuilder()
.client(NettyClient.class)
.callback(nettyResult -> SnailJobLog.LOCAL.info("Data report successfully requestId:[{}]", nettyResult.getReqId())).build();
diff --git a/snail-job-client/snail-job-client-retry-core/src/main/java/com/aizuda/snailjob/client/core/report/SyncReport.java b/snail-job-client/snail-job-client-retry-core/src/main/java/com/aizuda/snailjob/client/core/report/SyncReport.java
index e1fc0f09b..12aa411a5 100644
--- a/snail-job-client/snail-job-client-retry-core/src/main/java/com/aizuda/snailjob/client/core/report/SyncReport.java
+++ b/snail-job-client/snail-job-client-retry-core/src/main/java/com/aizuda/snailjob/client/core/report/SyncReport.java
@@ -8,7 +8,7 @@ import com.aizuda.snailjob.client.core.retryer.RetryerInfo;
import com.aizuda.snailjob.common.core.alarm.AlarmContext;
import com.aizuda.snailjob.common.core.alarm.SnailJobAlarmFactory;
import com.aizuda.snailjob.common.core.enums.RetryNotifySceneEnum;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.util.EnvironmentUtils;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.core.util.NetUtil;
@@ -73,7 +73,7 @@ public class SyncReport extends AbstractReport {
RetryTaskDTO retryTaskDTO = buildRetryTaskDTO(scene, targetClassName, args);
- NettyClient client = RequestBuilder.newBuilder()
+ NettyClient client = RequestBuilder.newBuilder()
.client(NettyClient.class)
.async(Boolean.FALSE)
.timeout(timeout)
@@ -81,7 +81,7 @@ public class SyncReport extends AbstractReport {
.build();
try {
- NettyResult result = client.reportRetryInfo(Collections.singletonList(retryTaskDTO));
+ SnailJobRpcResult result = client.reportRetryInfo(Collections.singletonList(retryTaskDTO));
SnailJobLog.LOCAL.debug("Data report result result:[{}]", JsonUtil.toJsonString(result));
return (Boolean) result.getData();
} catch (Exception e) {
diff --git a/snail-job-common/snail-job-common-core/pom.xml b/snail-job-common/snail-job-common-core/pom.xml
index 6a778025c..e51bd88b8 100644
--- a/snail-job-common/snail-job-common-core/pom.xml
+++ b/snail-job-common/snail-job-common-core/pom.xml
@@ -69,28 +69,21 @@
io.netty
netty-common
-
io.grpc
grpc-protobuf
- 1.63.0
-
io.grpc
grpc-stub
- 1.63.0
-
com.google.protobuf
protobuf-java
- 3.25.4
com.google.api.grpc
proto-google-common-protos
- 2.43.0
diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/constant/GrpcServerConstants.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/constant/GrpcServerConstants.java
new file mode 100644
index 000000000..d2d44b425
--- /dev/null
+++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/constant/GrpcServerConstants.java
@@ -0,0 +1,12 @@
+package com.aizuda.snailjob.common.core.constant;
+
+/**
+ * @author: opensnail
+ * @date : 2024-08-23
+ */
+public interface GrpcServerConstants {
+
+ String UNARY_SERVICE_NAME = "UnaryRequest";
+
+ String UNARY_METHOD_NAME = "unaryRequest";
+}
diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/RpcTypeEnum.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/RpcTypeEnum.java
new file mode 100644
index 000000000..c3bf279dd
--- /dev/null
+++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/RpcTypeEnum.java
@@ -0,0 +1,11 @@
+package com.aizuda.snailjob.common.core.enums;
+
+/**
+ * @author: opensnail
+ * @date : 2024-08-23
+ */
+public enum RpcTypeEnum {
+
+ GPRC,
+ NETTY
+}
diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcResult.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcResult.java
index 424a141d5..a8437191f 100644
--- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcResult.java
+++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcResult.java
@@ -40,10 +40,21 @@ private static final long serialVersionUID = 0L;
}
private int bitField0_;
- public static final int STATUS_FIELD_NUMBER = 1;
+ public static final int REQID_FIELD_NUMBER = 1;
+ private long reqId_ = 0L;
+ /**
+ * int64 reqId = 1;
+ * @return The reqId.
+ */
+ @java.lang.Override
+ public long getReqId() {
+ return reqId_;
+ }
+
+ public static final int STATUS_FIELD_NUMBER = 2;
private int status_ = 0;
/**
- * int32 status = 1;
+ * int32 status = 2;
* @return The status.
*/
@java.lang.Override
@@ -51,11 +62,11 @@ private static final long serialVersionUID = 0L;
return status_;
}
- public static final int MESSAGE_FIELD_NUMBER = 2;
+ public static final int MESSAGE_FIELD_NUMBER = 3;
@SuppressWarnings("serial")
private volatile java.lang.Object message_ = "";
/**
- * string message = 2;
+ * string message = 3;
* @return The message.
*/
@java.lang.Override
@@ -72,7 +83,7 @@ private static final long serialVersionUID = 0L;
}
}
/**
- * string message = 2;
+ * string message = 3;
* @return The bytes for message.
*/
@java.lang.Override
@@ -90,10 +101,10 @@ private static final long serialVersionUID = 0L;
}
}
- public static final int DATA_FIELD_NUMBER = 3;
+ public static final int DATA_FIELD_NUMBER = 4;
private com.google.protobuf.Any data_;
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
* @return Whether the data field is set.
*/
@java.lang.Override
@@ -101,7 +112,7 @@ private static final long serialVersionUID = 0L;
return ((bitField0_ & 0x00000001) != 0);
}
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
* @return The data.
*/
@java.lang.Override
@@ -109,7 +120,7 @@ private static final long serialVersionUID = 0L;
return data_ == null ? com.google.protobuf.Any.getDefaultInstance() : data_;
}
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
*/
@java.lang.Override
public com.google.protobuf.AnyOrBuilder getDataOrBuilder() {
@@ -130,14 +141,17 @@ private static final long serialVersionUID = 0L;
@java.lang.Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
+ if (reqId_ != 0L) {
+ output.writeInt64(1, reqId_);
+ }
if (status_ != 0) {
- output.writeInt32(1, status_);
+ output.writeInt32(2, status_);
}
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
- com.google.protobuf.GeneratedMessageV3.writeString(output, 2, message_);
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 3, message_);
}
if (((bitField0_ & 0x00000001) != 0)) {
- output.writeMessage(3, getData());
+ output.writeMessage(4, getData());
}
getUnknownFields().writeTo(output);
}
@@ -148,16 +162,20 @@ private static final long serialVersionUID = 0L;
if (size != -1) return size;
size = 0;
+ if (reqId_ != 0L) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeInt64Size(1, reqId_);
+ }
if (status_ != 0) {
size += com.google.protobuf.CodedOutputStream
- .computeInt32Size(1, status_);
+ .computeInt32Size(2, status_);
}
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
- size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, message_);
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, message_);
}
if (((bitField0_ & 0x00000001) != 0)) {
size += com.google.protobuf.CodedOutputStream
- .computeMessageSize(3, getData());
+ .computeMessageSize(4, getData());
}
size += getUnknownFields().getSerializedSize();
memoizedSize = size;
@@ -174,6 +192,8 @@ private static final long serialVersionUID = 0L;
}
com.aizuda.snailjob.common.core.grpc.auto.GrpcResult other = (com.aizuda.snailjob.common.core.grpc.auto.GrpcResult) obj;
+ if (getReqId()
+ != other.getReqId()) return false;
if (getStatus()
!= other.getStatus()) return false;
if (!getMessage()
@@ -194,6 +214,9 @@ private static final long serialVersionUID = 0L;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + REQID_FIELD_NUMBER;
+ hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+ getReqId());
hash = (37 * hash) + STATUS_FIELD_NUMBER;
hash = (53 * hash) + getStatus();
hash = (37 * hash) + MESSAGE_FIELD_NUMBER;
@@ -339,6 +362,7 @@ private static final long serialVersionUID = 0L;
public Builder clear() {
super.clear();
bitField0_ = 0;
+ reqId_ = 0L;
status_ = 0;
message_ = "";
data_ = null;
@@ -380,13 +404,16 @@ private static final long serialVersionUID = 0L;
private void buildPartial0(com.aizuda.snailjob.common.core.grpc.auto.GrpcResult result) {
int from_bitField0_ = bitField0_;
if (((from_bitField0_ & 0x00000001) != 0)) {
- result.status_ = status_;
+ result.reqId_ = reqId_;
}
if (((from_bitField0_ & 0x00000002) != 0)) {
+ result.status_ = status_;
+ }
+ if (((from_bitField0_ & 0x00000004) != 0)) {
result.message_ = message_;
}
int to_bitField0_ = 0;
- if (((from_bitField0_ & 0x00000004) != 0)) {
+ if (((from_bitField0_ & 0x00000008) != 0)) {
result.data_ = dataBuilder_ == null
? data_
: dataBuilder_.build();
@@ -439,12 +466,15 @@ private static final long serialVersionUID = 0L;
public Builder mergeFrom(com.aizuda.snailjob.common.core.grpc.auto.GrpcResult other) {
if (other == com.aizuda.snailjob.common.core.grpc.auto.GrpcResult.getDefaultInstance()) return this;
+ if (other.getReqId() != 0L) {
+ setReqId(other.getReqId());
+ }
if (other.getStatus() != 0) {
setStatus(other.getStatus());
}
if (!other.getMessage().isEmpty()) {
message_ = other.message_;
- bitField0_ |= 0x00000002;
+ bitField0_ |= 0x00000004;
onChanged();
}
if (other.hasData()) {
@@ -477,22 +507,27 @@ private static final long serialVersionUID = 0L;
done = true;
break;
case 8: {
- status_ = input.readInt32();
+ reqId_ = input.readInt64();
bitField0_ |= 0x00000001;
break;
} // case 8
- case 18: {
- message_ = input.readStringRequireUtf8();
+ case 16: {
+ status_ = input.readInt32();
bitField0_ |= 0x00000002;
break;
- } // case 18
+ } // case 16
case 26: {
- input.readMessage(
- getDataFieldBuilder().getBuilder(),
- extensionRegistry);
+ message_ = input.readStringRequireUtf8();
bitField0_ |= 0x00000004;
break;
} // case 26
+ case 34: {
+ input.readMessage(
+ getDataFieldBuilder().getBuilder(),
+ extensionRegistry);
+ bitField0_ |= 0x00000008;
+ break;
+ } // case 34
default: {
if (!super.parseUnknownField(input, extensionRegistry, tag)) {
done = true; // was an endgroup tag
@@ -510,9 +545,41 @@ private static final long serialVersionUID = 0L;
}
private int bitField0_;
+ private long reqId_ ;
+ /**
+ * int64 reqId = 1;
+ * @return The reqId.
+ */
+ @java.lang.Override
+ public long getReqId() {
+ return reqId_;
+ }
+ /**
+ * int64 reqId = 1;
+ * @param value The reqId to set.
+ * @return This builder for chaining.
+ */
+ public Builder setReqId(long value) {
+
+ reqId_ = value;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+ /**
+ * int64 reqId = 1;
+ * @return This builder for chaining.
+ */
+ public Builder clearReqId() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ reqId_ = 0L;
+ onChanged();
+ return this;
+ }
+
private int status_ ;
/**
- * int32 status = 1;
+ * int32 status = 2;
* @return The status.
*/
@java.lang.Override
@@ -520,23 +587,23 @@ private static final long serialVersionUID = 0L;
return status_;
}
/**
- * int32 status = 1;
+ * int32 status = 2;
* @param value The status to set.
* @return This builder for chaining.
*/
public Builder setStatus(int value) {
status_ = value;
- bitField0_ |= 0x00000001;
+ bitField0_ |= 0x00000002;
onChanged();
return this;
}
/**
- * int32 status = 1;
+ * int32 status = 2;
* @return This builder for chaining.
*/
public Builder clearStatus() {
- bitField0_ = (bitField0_ & ~0x00000001);
+ bitField0_ = (bitField0_ & ~0x00000002);
status_ = 0;
onChanged();
return this;
@@ -544,7 +611,7 @@ private static final long serialVersionUID = 0L;
private java.lang.Object message_ = "";
/**
- * string message = 2;
+ * string message = 3;
* @return The message.
*/
public java.lang.String getMessage() {
@@ -560,7 +627,7 @@ private static final long serialVersionUID = 0L;
}
}
/**
- * string message = 2;
+ * string message = 3;
* @return The bytes for message.
*/
public com.google.protobuf.ByteString
@@ -577,7 +644,7 @@ private static final long serialVersionUID = 0L;
}
}
/**
- * string message = 2;
+ * string message = 3;
* @param value The message to set.
* @return This builder for chaining.
*/
@@ -585,22 +652,22 @@ private static final long serialVersionUID = 0L;
java.lang.String value) {
if (value == null) { throw new NullPointerException(); }
message_ = value;
- bitField0_ |= 0x00000002;
+ bitField0_ |= 0x00000004;
onChanged();
return this;
}
/**
- * string message = 2;
+ * string message = 3;
* @return This builder for chaining.
*/
public Builder clearMessage() {
message_ = getDefaultInstance().getMessage();
- bitField0_ = (bitField0_ & ~0x00000002);
+ bitField0_ = (bitField0_ & ~0x00000004);
onChanged();
return this;
}
/**
- * string message = 2;
+ * string message = 3;
* @param value The bytes for message to set.
* @return This builder for chaining.
*/
@@ -609,7 +676,7 @@ private static final long serialVersionUID = 0L;
if (value == null) { throw new NullPointerException(); }
checkByteStringIsUtf8(value);
message_ = value;
- bitField0_ |= 0x00000002;
+ bitField0_ |= 0x00000004;
onChanged();
return this;
}
@@ -618,14 +685,14 @@ private static final long serialVersionUID = 0L;
private com.google.protobuf.SingleFieldBuilderV3<
com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> dataBuilder_;
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
* @return Whether the data field is set.
*/
public boolean hasData() {
- return ((bitField0_ & 0x00000004) != 0);
+ return ((bitField0_ & 0x00000008) != 0);
}
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
* @return The data.
*/
public com.google.protobuf.Any getData() {
@@ -636,7 +703,7 @@ private static final long serialVersionUID = 0L;
}
}
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
*/
public Builder setData(com.google.protobuf.Any value) {
if (dataBuilder_ == null) {
@@ -647,12 +714,12 @@ private static final long serialVersionUID = 0L;
} else {
dataBuilder_.setMessage(value);
}
- bitField0_ |= 0x00000004;
+ bitField0_ |= 0x00000008;
onChanged();
return this;
}
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
*/
public Builder setData(
com.google.protobuf.Any.Builder builderForValue) {
@@ -661,16 +728,16 @@ private static final long serialVersionUID = 0L;
} else {
dataBuilder_.setMessage(builderForValue.build());
}
- bitField0_ |= 0x00000004;
+ bitField0_ |= 0x00000008;
onChanged();
return this;
}
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
*/
public Builder mergeData(com.google.protobuf.Any value) {
if (dataBuilder_ == null) {
- if (((bitField0_ & 0x00000004) != 0) &&
+ if (((bitField0_ & 0x00000008) != 0) &&
data_ != null &&
data_ != com.google.protobuf.Any.getDefaultInstance()) {
getDataBuilder().mergeFrom(value);
@@ -681,16 +748,16 @@ private static final long serialVersionUID = 0L;
dataBuilder_.mergeFrom(value);
}
if (data_ != null) {
- bitField0_ |= 0x00000004;
+ bitField0_ |= 0x00000008;
onChanged();
}
return this;
}
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
*/
public Builder clearData() {
- bitField0_ = (bitField0_ & ~0x00000004);
+ bitField0_ = (bitField0_ & ~0x00000008);
data_ = null;
if (dataBuilder_ != null) {
dataBuilder_.dispose();
@@ -700,15 +767,15 @@ private static final long serialVersionUID = 0L;
return this;
}
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
*/
public com.google.protobuf.Any.Builder getDataBuilder() {
- bitField0_ |= 0x00000004;
+ bitField0_ |= 0x00000008;
onChanged();
return getDataFieldBuilder().getBuilder();
}
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
*/
public com.google.protobuf.AnyOrBuilder getDataOrBuilder() {
if (dataBuilder_ != null) {
@@ -719,7 +786,7 @@ private static final long serialVersionUID = 0L;
}
}
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
*/
private com.google.protobuf.SingleFieldBuilderV3<
com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>
diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcResultOrBuilder.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcResultOrBuilder.java
index 1320a1f18..497fef54a 100644
--- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcResultOrBuilder.java
+++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcResultOrBuilder.java
@@ -8,35 +8,41 @@ public interface GrpcResultOrBuilder extends
com.google.protobuf.MessageOrBuilder {
/**
- * int32 status = 1;
+ * int64 reqId = 1;
+ * @return The reqId.
+ */
+ long getReqId();
+
+ /**
+ * int32 status = 2;
* @return The status.
*/
int getStatus();
/**
- * string message = 2;
+ * string message = 3;
* @return The message.
*/
java.lang.String getMessage();
/**
- * string message = 2;
+ * string message = 3;
* @return The bytes for message.
*/
com.google.protobuf.ByteString
getMessageBytes();
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
* @return Whether the data field is set.
*/
boolean hasData();
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
* @return The data.
*/
com.google.protobuf.Any getData();
/**
- * .google.protobuf.Any data = 3;
+ * .google.protobuf.Any data = 4;
*/
com.google.protobuf.AnyOrBuilder getDataOrBuilder();
}
diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcSnailJobRequest.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcSnailJobRequest.java
index 2534320aa..016bb124e 100644
--- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcSnailJobRequest.java
+++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcSnailJobRequest.java
@@ -39,6 +39,17 @@ private static final long serialVersionUID = 0L;
}
private int bitField0_;
+ public static final int REQID_FIELD_NUMBER = 1;
+ private long reqId_ = 0L;
+ /**
+ * int64 reqId = 1;
+ * @return The reqId.
+ */
+ @java.lang.Override
+ public long getReqId() {
+ return reqId_;
+ }
+
public static final int METADATA_FIELD_NUMBER = 2;
private com.aizuda.snailjob.common.core.grpc.auto.Metadata metadata_;
/**
@@ -105,6 +116,9 @@ private static final long serialVersionUID = 0L;
@java.lang.Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
+ if (reqId_ != 0L) {
+ output.writeInt64(1, reqId_);
+ }
if (((bitField0_ & 0x00000001) != 0)) {
output.writeMessage(2, getMetadata());
}
@@ -120,6 +134,10 @@ private static final long serialVersionUID = 0L;
if (size != -1) return size;
size = 0;
+ if (reqId_ != 0L) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeInt64Size(1, reqId_);
+ }
if (((bitField0_ & 0x00000001) != 0)) {
size += com.google.protobuf.CodedOutputStream
.computeMessageSize(2, getMetadata());
@@ -143,6 +161,8 @@ private static final long serialVersionUID = 0L;
}
com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest other = (com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest) obj;
+ if (getReqId()
+ != other.getReqId()) return false;
if (hasMetadata() != other.hasMetadata()) return false;
if (hasMetadata()) {
if (!getMetadata()
@@ -164,6 +184,9 @@ private static final long serialVersionUID = 0L;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + REQID_FIELD_NUMBER;
+ hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+ getReqId());
if (hasMetadata()) {
hash = (37 * hash) + METADATA_FIELD_NUMBER;
hash = (53 * hash) + getMetadata().hashCode();
@@ -310,6 +333,7 @@ private static final long serialVersionUID = 0L;
public Builder clear() {
super.clear();
bitField0_ = 0;
+ reqId_ = 0L;
metadata_ = null;
if (metadataBuilder_ != null) {
metadataBuilder_.dispose();
@@ -353,14 +377,17 @@ private static final long serialVersionUID = 0L;
private void buildPartial0(com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest result) {
int from_bitField0_ = bitField0_;
- int to_bitField0_ = 0;
if (((from_bitField0_ & 0x00000001) != 0)) {
+ result.reqId_ = reqId_;
+ }
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000002) != 0)) {
result.metadata_ = metadataBuilder_ == null
? metadata_
: metadataBuilder_.build();
to_bitField0_ |= 0x00000001;
}
- if (((from_bitField0_ & 0x00000002) != 0)) {
+ if (((from_bitField0_ & 0x00000004) != 0)) {
result.body_ = bodyBuilder_ == null
? body_
: bodyBuilder_.build();
@@ -413,6 +440,9 @@ private static final long serialVersionUID = 0L;
public Builder mergeFrom(com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest other) {
if (other == com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest.getDefaultInstance()) return this;
+ if (other.getReqId() != 0L) {
+ setReqId(other.getReqId());
+ }
if (other.hasMetadata()) {
mergeMetadata(other.getMetadata());
}
@@ -445,18 +475,23 @@ private static final long serialVersionUID = 0L;
case 0:
done = true;
break;
+ case 8: {
+ reqId_ = input.readInt64();
+ bitField0_ |= 0x00000001;
+ break;
+ } // case 8
case 18: {
input.readMessage(
getMetadataFieldBuilder().getBuilder(),
extensionRegistry);
- bitField0_ |= 0x00000001;
+ bitField0_ |= 0x00000002;
break;
} // case 18
case 26: {
input.readMessage(
getBodyFieldBuilder().getBuilder(),
extensionRegistry);
- bitField0_ |= 0x00000002;
+ bitField0_ |= 0x00000004;
break;
} // case 26
default: {
@@ -476,6 +511,38 @@ private static final long serialVersionUID = 0L;
}
private int bitField0_;
+ private long reqId_ ;
+ /**
+ * int64 reqId = 1;
+ * @return The reqId.
+ */
+ @java.lang.Override
+ public long getReqId() {
+ return reqId_;
+ }
+ /**
+ * int64 reqId = 1;
+ * @param value The reqId to set.
+ * @return This builder for chaining.
+ */
+ public Builder setReqId(long value) {
+
+ reqId_ = value;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+ /**
+ * int64 reqId = 1;
+ * @return This builder for chaining.
+ */
+ public Builder clearReqId() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ reqId_ = 0L;
+ onChanged();
+ return this;
+ }
+
private com.aizuda.snailjob.common.core.grpc.auto.Metadata metadata_;
private com.google.protobuf.SingleFieldBuilderV3<
com.aizuda.snailjob.common.core.grpc.auto.Metadata, com.aizuda.snailjob.common.core.grpc.auto.Metadata.Builder, com.aizuda.snailjob.common.core.grpc.auto.MetadataOrBuilder> metadataBuilder_;
@@ -484,7 +551,7 @@ private static final long serialVersionUID = 0L;
* @return Whether the metadata field is set.
*/
public boolean hasMetadata() {
- return ((bitField0_ & 0x00000001) != 0);
+ return ((bitField0_ & 0x00000002) != 0);
}
/**
* .Metadata metadata = 2;
@@ -509,7 +576,7 @@ private static final long serialVersionUID = 0L;
} else {
metadataBuilder_.setMessage(value);
}
- bitField0_ |= 0x00000001;
+ bitField0_ |= 0x00000002;
onChanged();
return this;
}
@@ -523,7 +590,7 @@ private static final long serialVersionUID = 0L;
} else {
metadataBuilder_.setMessage(builderForValue.build());
}
- bitField0_ |= 0x00000001;
+ bitField0_ |= 0x00000002;
onChanged();
return this;
}
@@ -532,7 +599,7 @@ private static final long serialVersionUID = 0L;
*/
public Builder mergeMetadata(com.aizuda.snailjob.common.core.grpc.auto.Metadata value) {
if (metadataBuilder_ == null) {
- if (((bitField0_ & 0x00000001) != 0) &&
+ if (((bitField0_ & 0x00000002) != 0) &&
metadata_ != null &&
metadata_ != com.aizuda.snailjob.common.core.grpc.auto.Metadata.getDefaultInstance()) {
getMetadataBuilder().mergeFrom(value);
@@ -543,7 +610,7 @@ private static final long serialVersionUID = 0L;
metadataBuilder_.mergeFrom(value);
}
if (metadata_ != null) {
- bitField0_ |= 0x00000001;
+ bitField0_ |= 0x00000002;
onChanged();
}
return this;
@@ -552,7 +619,7 @@ private static final long serialVersionUID = 0L;
* .Metadata metadata = 2;
*/
public Builder clearMetadata() {
- bitField0_ = (bitField0_ & ~0x00000001);
+ bitField0_ = (bitField0_ & ~0x00000002);
metadata_ = null;
if (metadataBuilder_ != null) {
metadataBuilder_.dispose();
@@ -565,7 +632,7 @@ private static final long serialVersionUID = 0L;
* .Metadata metadata = 2;
*/
public com.aizuda.snailjob.common.core.grpc.auto.Metadata.Builder getMetadataBuilder() {
- bitField0_ |= 0x00000001;
+ bitField0_ |= 0x00000002;
onChanged();
return getMetadataFieldBuilder().getBuilder();
}
@@ -605,7 +672,7 @@ private static final long serialVersionUID = 0L;
* @return Whether the body field is set.
*/
public boolean hasBody() {
- return ((bitField0_ & 0x00000002) != 0);
+ return ((bitField0_ & 0x00000004) != 0);
}
/**
* .google.protobuf.Any body = 3;
@@ -630,7 +697,7 @@ private static final long serialVersionUID = 0L;
} else {
bodyBuilder_.setMessage(value);
}
- bitField0_ |= 0x00000002;
+ bitField0_ |= 0x00000004;
onChanged();
return this;
}
@@ -644,7 +711,7 @@ private static final long serialVersionUID = 0L;
} else {
bodyBuilder_.setMessage(builderForValue.build());
}
- bitField0_ |= 0x00000002;
+ bitField0_ |= 0x00000004;
onChanged();
return this;
}
@@ -653,7 +720,7 @@ private static final long serialVersionUID = 0L;
*/
public Builder mergeBody(com.google.protobuf.Any value) {
if (bodyBuilder_ == null) {
- if (((bitField0_ & 0x00000002) != 0) &&
+ if (((bitField0_ & 0x00000004) != 0) &&
body_ != null &&
body_ != com.google.protobuf.Any.getDefaultInstance()) {
getBodyBuilder().mergeFrom(value);
@@ -664,7 +731,7 @@ private static final long serialVersionUID = 0L;
bodyBuilder_.mergeFrom(value);
}
if (body_ != null) {
- bitField0_ |= 0x00000002;
+ bitField0_ |= 0x00000004;
onChanged();
}
return this;
@@ -673,7 +740,7 @@ private static final long serialVersionUID = 0L;
* .google.protobuf.Any body = 3;
*/
public Builder clearBody() {
- bitField0_ = (bitField0_ & ~0x00000002);
+ bitField0_ = (bitField0_ & ~0x00000004);
body_ = null;
if (bodyBuilder_ != null) {
bodyBuilder_.dispose();
@@ -686,7 +753,7 @@ private static final long serialVersionUID = 0L;
* .google.protobuf.Any body = 3;
*/
public com.google.protobuf.Any.Builder getBodyBuilder() {
- bitField0_ |= 0x00000002;
+ bitField0_ |= 0x00000004;
onChanged();
return getBodyFieldBuilder().getBuilder();
}
diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcSnailJobRequestOrBuilder.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcSnailJobRequestOrBuilder.java
index b7e10aee0..d85261f51 100644
--- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcSnailJobRequestOrBuilder.java
+++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/GrpcSnailJobRequestOrBuilder.java
@@ -7,6 +7,12 @@ public interface GrpcSnailJobRequestOrBuilder extends
// @@protoc_insertion_point(interface_extends:GrpcSnailJobRequest)
com.google.protobuf.MessageOrBuilder {
+ /**
+ * int64 reqId = 1;
+ * @return The reqId.
+ */
+ long getReqId();
+
/**
* .Metadata metadata = 2;
* @return Whether the metadata field is set.
diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/RequestGrpc.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/RequestGrpc.java
deleted file mode 100644
index 4df1f6269..000000000
--- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/RequestGrpc.java
+++ /dev/null
@@ -1,293 +0,0 @@
-package com.aizuda.snailjob.common.core.grpc.auto;
-
-import static io.grpc.MethodDescriptor.generateFullMethodName;
-
-/**
- */
-@javax.annotation.Generated(
- value = "by gRPC proto compiler (version 1.63.0)",
- comments = "Source: snail_job_grpc_service.proto")
-@io.grpc.stub.annotations.GrpcGenerated
-public final class RequestGrpc {
-
- private RequestGrpc() {}
-
- public static final java.lang.String SERVICE_NAME = "Request";
-
- // Static method descriptors that strictly reflect the proto.
- private static volatile io.grpc.MethodDescriptor getRequestMethod;
-
- @io.grpc.stub.annotations.RpcMethod(
- fullMethodName = SERVICE_NAME + '/' + "request",
- requestType = com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest.class,
- responseType = com.aizuda.snailjob.common.core.grpc.auto.GrpcResult.class,
- methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
- public static io.grpc.MethodDescriptor getRequestMethod() {
- io.grpc.MethodDescriptor getRequestMethod;
- if ((getRequestMethod = RequestGrpc.getRequestMethod) == null) {
- synchronized (RequestGrpc.class) {
- if ((getRequestMethod = RequestGrpc.getRequestMethod) == null) {
- RequestGrpc.getRequestMethod = getRequestMethod =
- io.grpc.MethodDescriptor.newBuilder()
- .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
- .setFullMethodName(generateFullMethodName(SERVICE_NAME, "request"))
- .setSampledToLocalTracing(true)
- .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
- com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest.getDefaultInstance()))
- .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
- com.aizuda.snailjob.common.core.grpc.auto.GrpcResult.getDefaultInstance()))
- .setSchemaDescriptor(new RequestMethodDescriptorSupplier("request"))
- .build();
- }
- }
- }
- return getRequestMethod;
- }
-
- /**
- * Creates a new async stub that supports all call types for the service
- */
- public static RequestStub newStub(io.grpc.Channel channel) {
- io.grpc.stub.AbstractStub.StubFactory factory =
- new io.grpc.stub.AbstractStub.StubFactory() {
- @java.lang.Override
- public RequestStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
- return new RequestStub(channel, callOptions);
- }
- };
- return RequestStub.newStub(factory, channel);
- }
-
- /**
- * Creates a new blocking-style stub that supports unary and streaming output calls on the service
- */
- public static RequestBlockingStub newBlockingStub(
- io.grpc.Channel channel) {
- io.grpc.stub.AbstractStub.StubFactory factory =
- new io.grpc.stub.AbstractStub.StubFactory() {
- @java.lang.Override
- public RequestBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
- return new RequestBlockingStub(channel, callOptions);
- }
- };
- return RequestBlockingStub.newStub(factory, channel);
- }
-
- /**
- * Creates a new ListenableFuture-style stub that supports unary calls on the service
- */
- public static RequestFutureStub newFutureStub(
- io.grpc.Channel channel) {
- io.grpc.stub.AbstractStub.StubFactory factory =
- new io.grpc.stub.AbstractStub.StubFactory() {
- @java.lang.Override
- public RequestFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
- return new RequestFutureStub(channel, callOptions);
- }
- };
- return RequestFutureStub.newStub(factory, channel);
- }
-
- /**
- */
- public interface AsyncService {
-
- /**
- */
- default void request(com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest request,
- io.grpc.stub.StreamObserver responseObserver) {
- io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRequestMethod(), responseObserver);
- }
- }
-
- /**
- * Base class for the server implementation of the service Request.
- */
- public static abstract class RequestImplBase
- implements io.grpc.BindableService, AsyncService {
-
- @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
- return RequestGrpc.bindService(this);
- }
- }
-
- /**
- * A stub to allow clients to do asynchronous rpc calls to service Request.
- */
- public static final class RequestStub
- extends io.grpc.stub.AbstractAsyncStub {
- private RequestStub(
- io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
- super(channel, callOptions);
- }
-
- @java.lang.Override
- protected RequestStub build(
- io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
- return new RequestStub(channel, callOptions);
- }
-
- /**
- */
- public void request(com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest request,
- io.grpc.stub.StreamObserver responseObserver) {
- io.grpc.stub.ClientCalls.asyncUnaryCall(
- getChannel().newCall(getRequestMethod(), getCallOptions()), request, responseObserver);
- }
- }
-
- /**
- * A stub to allow clients to do synchronous rpc calls to service Request.
- */
- public static final class RequestBlockingStub
- extends io.grpc.stub.AbstractBlockingStub {
- private RequestBlockingStub(
- io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
- super(channel, callOptions);
- }
-
- @java.lang.Override
- protected RequestBlockingStub build(
- io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
- return new RequestBlockingStub(channel, callOptions);
- }
-
- /**
- */
- public com.aizuda.snailjob.common.core.grpc.auto.GrpcResult request(com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest request) {
- return io.grpc.stub.ClientCalls.blockingUnaryCall(
- getChannel(), getRequestMethod(), getCallOptions(), request);
- }
- }
-
- /**
- * A stub to allow clients to do ListenableFuture-style rpc calls to service Request.
- */
- public static final class RequestFutureStub
- extends io.grpc.stub.AbstractFutureStub {
- private RequestFutureStub(
- io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
- super(channel, callOptions);
- }
-
- @java.lang.Override
- protected RequestFutureStub build(
- io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
- return new RequestFutureStub(channel, callOptions);
- }
-
- /**
- */
- public com.google.common.util.concurrent.ListenableFuture request(
- com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest request) {
- return io.grpc.stub.ClientCalls.futureUnaryCall(
- getChannel().newCall(getRequestMethod(), getCallOptions()), request);
- }
- }
-
- private static final int METHODID_REQUEST = 0;
-
- private static final class MethodHandlers implements
- io.grpc.stub.ServerCalls.UnaryMethod,
- io.grpc.stub.ServerCalls.ServerStreamingMethod,
- io.grpc.stub.ServerCalls.ClientStreamingMethod,
- io.grpc.stub.ServerCalls.BidiStreamingMethod {
- private final AsyncService serviceImpl;
- private final int methodId;
-
- MethodHandlers(AsyncService serviceImpl, int methodId) {
- this.serviceImpl = serviceImpl;
- this.methodId = methodId;
- }
-
- @java.lang.Override
- @java.lang.SuppressWarnings("unchecked")
- public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) {
- switch (methodId) {
- case METHODID_REQUEST:
- serviceImpl.request((com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest) request,
- (io.grpc.stub.StreamObserver) responseObserver);
- break;
- default:
- throw new AssertionError();
- }
- }
-
- @java.lang.Override
- @java.lang.SuppressWarnings("unchecked")
- public io.grpc.stub.StreamObserver invoke(
- io.grpc.stub.StreamObserver responseObserver) {
- switch (methodId) {
- default:
- throw new AssertionError();
- }
- }
- }
-
- public static final io.grpc.ServerServiceDefinition bindService(AsyncService service) {
- return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
- .addMethod(
- getRequestMethod(),
- io.grpc.stub.ServerCalls.asyncUnaryCall(
- new MethodHandlers<
- com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest,
- com.aizuda.snailjob.common.core.grpc.auto.GrpcResult>(
- service, METHODID_REQUEST)))
- .build();
- }
-
- private static abstract class RequestBaseDescriptorSupplier
- implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
- RequestBaseDescriptorSupplier() {}
-
- @java.lang.Override
- public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
- return com.aizuda.snailjob.common.core.grpc.auto.SnailJobGrpcService.getDescriptor();
- }
-
- @java.lang.Override
- public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
- return getFileDescriptor().findServiceByName("Request");
- }
- }
-
- private static final class RequestFileDescriptorSupplier
- extends RequestBaseDescriptorSupplier {
- RequestFileDescriptorSupplier() {}
- }
-
- private static final class RequestMethodDescriptorSupplier
- extends RequestBaseDescriptorSupplier
- implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
- private final java.lang.String methodName;
-
- RequestMethodDescriptorSupplier(java.lang.String methodName) {
- this.methodName = methodName;
- }
-
- @java.lang.Override
- public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() {
- return getServiceDescriptor().findMethodByName(methodName);
- }
- }
-
- private static volatile io.grpc.ServiceDescriptor serviceDescriptor;
-
- public static io.grpc.ServiceDescriptor getServiceDescriptor() {
- io.grpc.ServiceDescriptor result = serviceDescriptor;
- if (result == null) {
- synchronized (RequestGrpc.class) {
- result = serviceDescriptor;
- if (result == null) {
- serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
- .setSchemaDescriptor(new RequestFileDescriptorSupplier())
- .addMethod(getRequestMethod())
- .build();
- }
- }
- }
- return result;
- }
-}
diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/SnailJobGrpcService.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/SnailJobGrpcService.java
index 44c2b8d7b..9519b60be 100644
--- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/SnailJobGrpcService.java
+++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/grpc/auto/SnailJobGrpcService.java
@@ -48,15 +48,14 @@ public final class SnailJobGrpcService {
"tamp.proto\"\220\001\n\010Metadata\022\014\n\004type\030\003 \001(\t\022\'\n" +
"\007headers\030\007 \003(\0132\026.Metadata.HeadersEntry\022\020" +
"\n\010clientIp\030\010 \001(\t\022\013\n\003uri\030\t \001(\t\032.\n\014Headers" +
- "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"V\n" +
- "\023GrpcSnailJobRequest\022\033\n\010metadata\030\002 \001(\0132\t" +
- ".Metadata\022\"\n\004body\030\003 \001(\0132\024.google.protobu" +
- "f.Any\"Q\n\nGrpcResult\022\016\n\006status\030\001 \001(\005\022\017\n\007m" +
- "essage\030\002 \001(\t\022\"\n\004data\030\003 \001(\0132\024.google.prot" +
- "obuf.Any29\n\007Request\022.\n\007request\022\024.GrpcSna" +
- "ilJobRequest\032\013.GrpcResult\"\000B-\n)com.aizud" +
- "a.snailjob.common.core.grpc.autoP\001b\006prot" +
- "o3"
+ "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"e\n" +
+ "\023GrpcSnailJobRequest\022\r\n\005reqId\030\001 \001(\003\022\033\n\010m" +
+ "etadata\030\002 \001(\0132\t.Metadata\022\"\n\004body\030\003 \001(\0132\024" +
+ ".google.protobuf.Any\"`\n\nGrpcResult\022\r\n\005re" +
+ "qId\030\001 \001(\003\022\016\n\006status\030\002 \001(\005\022\017\n\007message\030\003 \001" +
+ "(\t\022\"\n\004data\030\004 \001(\0132\024.google.protobuf.AnyB-" +
+ "\n)com.aizuda.snailjob.common.core.grpc.a" +
+ "utoP\001b\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
@@ -81,13 +80,13 @@ public final class SnailJobGrpcService {
internal_static_GrpcSnailJobRequest_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_GrpcSnailJobRequest_descriptor,
- new java.lang.String[] { "Metadata", "Body", });
+ new java.lang.String[] { "ReqId", "Metadata", "Body", });
internal_static_GrpcResult_descriptor =
getDescriptor().getMessageTypes().get(2);
internal_static_GrpcResult_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_GrpcResult_descriptor,
- new java.lang.String[] { "Status", "Message", "Data", });
+ new java.lang.String[] { "ReqId", "Status", "Message", "Data", });
com.google.protobuf.AnyProto.getDescriptor();
com.google.protobuf.TimestampProto.getDescriptor();
}
diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/model/NettyResult.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/model/SnailJobRpcResult.java
similarity index 65%
rename from snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/model/NettyResult.java
rename to snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/model/SnailJobRpcResult.java
index 5901624fa..0a0ec26ba 100644
--- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/model/NettyResult.java
+++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/model/SnailJobRpcResult.java
@@ -11,19 +11,19 @@ import lombok.experimental.Accessors;
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
-public class NettyResult extends Result
-
- net.devh
- grpc-client-spring-boot-starter
-
+
io.grpc
grpc-netty-shaded
- 1.63.0
- net.devh
- grpc-server-spring-boot-starter
- 3.1.0.RELEASE
+ io.grpc
+ grpc-protobuf
+
+
+ io.grpc
+ grpc-stub
+
+
+ io.grpc
+ grpc-api
+
+
+ io.grpc
+ grpc-util
org.scala-lang
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/HttpRequestHandler.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/HttpRequestHandler.java
index 7063d380d..553d650fc 100644
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/HttpRequestHandler.java
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/HttpRequestHandler.java
@@ -1,6 +1,7 @@
package com.aizuda.snailjob.server.common;
import cn.hutool.core.net.url.UrlBuilder;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import io.netty.handler.codec.http.HttpHeaders;
import io.netty.handler.codec.http.HttpMethod;
@@ -17,6 +18,6 @@ public interface HttpRequestHandler {
HttpMethod method();
- String doHandler(String content, UrlBuilder urlBuilder, HttpHeaders headers);
+ SnailJobRpcResult doHandler(String content, UrlBuilder urlBuilder, HttpHeaders headers);
}
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/akka/ActorGenerator.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/akka/ActorGenerator.java
index 29f81ec11..97d472990 100644
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/akka/ActorGenerator.java
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/akka/ActorGenerator.java
@@ -17,6 +17,7 @@ public class ActorGenerator {
public static final String SCAN_BUCKET_ACTOR = "ScanBucketActor";
public static final String REQUEST_HANDLER_ACTOR = "RequestHandlerActor";
+ public static final String GRPC_REQUEST_HANDLER_ACTOR = "GrpcRequestHandlerActor";
private static final String COMMON_LOG_DISPATCHER = "akka.actor.common-log-dispatcher";
private static final String COMMON_SCAN_TASK_DISPATCHER = "akka.actor.common-scan-task-dispatcher";
private static final String NETTY_RECEIVE_REQUEST_DISPATCHER = "akka.actor.netty-receive-request-dispatcher";
@@ -180,7 +181,7 @@ public class ActorGenerator {
}
/**
- * 生成扫描重试数据的actor
+ * netty请求处理器
*
* @return actor 引用
*/
@@ -189,6 +190,16 @@ public class ActorGenerator {
.withDispatcher(NETTY_RECEIVE_REQUEST_DISPATCHER));
}
+ /**
+ * Grpc请求处理器
+ *
+ * @return actor 引用
+ */
+ public static ActorRef requestGrpcHandlerActor() {
+ return getNettyActorSystem().actorOf(getSpringExtension().props(GRPC_REQUEST_HANDLER_ACTOR)
+ .withDispatcher(NETTY_RECEIVE_REQUEST_DISPATCHER));
+ }
+
/**
* Job调度准备阶段actor
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 f3613ca44..9f83329a7 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,11 +1,18 @@
package com.aizuda.snailjob.server.common.config;
import com.aizuda.snailjob.common.core.alarm.email.SnailJobMailProperties;
+import com.aizuda.snailjob.common.core.enums.RpcTypeEnum;
+import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.context.annotation.Configuration;
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
+import java.util.concurrent.TimeUnit;
+
/**
* 系统配置
*
@@ -105,10 +112,85 @@ public class SystemProperties {
*/
private int summaryDay = 7;
+ /**
+ * rpc类型
+ */
+ private RpcTypeEnum rpcType = RpcTypeEnum.NETTY;
+
/**
* 邮件配置
*/
@NestedConfigurationProperty
private SnailJobMailProperties mail = new SnailJobMailProperties();
+ /**
+ * 客户端Rpc配置
+ */
+ private RpcClientProperties clientRpc = new RpcClientProperties();
+
+ /**
+ * 服务端Rpc配置
+ */
+ private RpcServerProperties serverRpc = new RpcServerProperties();
+
+ @Data
+ public static class RpcServerProperties {
+
+ private int maxInboundMessageSize = 10 * 1024 * 1024;
+
+ private Duration keepAliveTime = Duration.of(2, ChronoUnit.HOURS);
+
+ private Duration keepAliveTimeout = Duration.of(20, ChronoUnit.SECONDS);
+
+ private Duration permitKeepAliveTime = Duration.of(5, ChronoUnit.MINUTES);
+
+ private ThreadPoolConfig dispatcherTp = new ThreadPoolConfig(16, 16, 1, TimeUnit.SECONDS, 10000);
+
+ }
+
+ @Data
+ public static class RpcClientProperties {
+
+ private int maxInboundMessageSize = 10 * 1024 * 1024;
+
+ private Duration keepAliveTime = Duration.of(2, ChronoUnit.HOURS);
+
+ private Duration keepAliveTimeout = Duration.of(20, ChronoUnit.SECONDS);
+
+ private Duration permitKeepAliveTime = Duration.of(5, ChronoUnit.MINUTES);
+
+ private ThreadPoolConfig clientTp = new ThreadPoolConfig(16, 16, 1, TimeUnit.SECONDS, 10000);
+
+ }
+
+ @Data
+ @AllArgsConstructor
+ @NoArgsConstructor
+ public static class ThreadPoolConfig {
+
+ /**
+ * 核心线程池
+ */
+ private int corePoolSize = 16;
+
+ /**
+ * 最大线程数
+ */
+ private int maximumPoolSize = 16;
+
+ /**
+ * 线程存活时间
+ */
+ private long keepAliveTime = 1;
+
+ /**
+ * 线程存活时间(单位)
+ */
+ private TimeUnit timeUnit = TimeUnit.SECONDS;
+
+ /**
+ * 队列容量
+ */
+ private int queueCapacity = 10000;
+ }
}
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/handler/GetHttpRequestHandler.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/handler/GetHttpRequestHandler.java
index 88a709eed..88d7908eb 100644
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/handler/GetHttpRequestHandler.java
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/handler/GetHttpRequestHandler.java
@@ -2,6 +2,7 @@ package com.aizuda.snailjob.server.common.handler;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.net.url.UrlQuery;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.server.common.HttpRequestHandler;
import io.netty.handler.codec.http.HttpHeaders;
@@ -15,11 +16,11 @@ import io.netty.handler.codec.http.HttpHeaders;
public abstract class GetHttpRequestHandler implements HttpRequestHandler {
@Override
- public String doHandler(String content, UrlBuilder builder, HttpHeaders headers) {
+ public SnailJobRpcResult doHandler(String content, UrlBuilder builder, HttpHeaders headers) {
UrlQuery query = builder.getQuery();
return doHandler(content, query, headers);
}
- public abstract String doHandler(String content, UrlQuery query, HttpHeaders headers);
+ public abstract SnailJobRpcResult doHandler(String content, UrlQuery query, HttpHeaders headers);
}
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/handler/PostHttpRequestHandler.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/handler/PostHttpRequestHandler.java
index a6a5b6dd1..2525d0094 100644
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/handler/PostHttpRequestHandler.java
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/handler/PostHttpRequestHandler.java
@@ -2,6 +2,7 @@ package com.aizuda.snailjob.server.common.handler;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.net.url.UrlQuery;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.server.common.HttpRequestHandler;
import io.netty.handler.codec.http.HttpHeaders;
@@ -15,11 +16,11 @@ import io.netty.handler.codec.http.HttpHeaders;
public abstract class PostHttpRequestHandler implements HttpRequestHandler {
@Override
- public String doHandler(String content, UrlBuilder builder, HttpHeaders headers) {
+ public SnailJobRpcResult doHandler(String content, UrlBuilder builder, HttpHeaders headers) {
UrlQuery query = builder.getQuery();
return doHandler(content, query, headers);
}
- public abstract String doHandler(String content, UrlQuery query, HttpHeaders headers);
+ public abstract SnailJobRpcResult doHandler(String content, UrlQuery query, HttpHeaders headers);
}
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/GrpcChannel.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/GrpcChannel.java
index 8d088bccb..3d55eb8ce 100644
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/GrpcChannel.java
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/GrpcChannel.java
@@ -1,28 +1,33 @@
package com.aizuda.snailjob.server.common.rpc.client;
+import com.aizuda.snailjob.common.core.context.SnailSpringContext;
import com.aizuda.snailjob.common.core.grpc.auto.GrpcResult;
import com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest;
import com.aizuda.snailjob.common.core.grpc.auto.Metadata;
import com.aizuda.snailjob.common.log.SnailJobLog;
+import com.aizuda.snailjob.server.common.config.SystemProperties;
+import com.aizuda.snailjob.server.common.config.SystemProperties.RpcClientProperties;
+import com.aizuda.snailjob.server.common.config.SystemProperties.ThreadPoolConfig;
import com.aizuda.snailjob.server.common.triple.Pair;
import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.google.protobuf.Any;
import com.google.protobuf.UnsafeByteOperations;
+import io.grpc.DecompressorRegistry;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.MethodDescriptor;
import io.grpc.protobuf.ProtoUtils;
-import io.netty.bootstrap.Bootstrap;
-import io.netty.handler.codec.http.HttpHeaders;
-import io.netty.handler.codec.http.HttpMethod;
import lombok.extern.slf4j.Slf4j;
import java.net.ConnectException;
import java.nio.channels.ClosedChannelException;
-import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
/**
* @author opensnail
@@ -34,6 +39,7 @@ public class GrpcChannel {
private GrpcChannel() {
}
+ private static final ThreadPoolExecutor grpcExecutor = createGrpcExecutor();
private static ConcurrentHashMap, ManagedChannel> CHANNEL_MAP = new ConcurrentHashMap<>(16);
public static void setChannel(String hostId, String ip, ManagedChannel channel) {
@@ -52,14 +58,17 @@ public class GrpcChannel {
/**
* 发送数据
*
- * @param url url地址
- * @param body 请求的消息体
+ * @param url url地址
+ * @param body 请求的消息体
+ * @param reqId
* @throws InterruptedException
*/
- public static ListenableFuture send(String hostId, String hostIp, Integer port, String url, String body, Map headersMap) throws InterruptedException {
+ public static ListenableFuture send(String hostId, String hostIp, Integer port, String url, String body, Map headersMap,
+ final long reqId) {
ManagedChannel channel = CHANNEL_MAP.get(Pair.of(hostId, hostIp));
if (Objects.isNull(channel) || !channel.isShutdown() || !channel.isShutdown()) {
+ removeChannel(channel);
channel = connect(hostId, hostIp, port);
if (Objects.isNull(channel)) {
SnailJobLog.LOCAL.error("send message but channel is null url:[{}] method:[{}] body:[{}] ", url, body);
@@ -77,6 +86,7 @@ public class GrpcChannel {
GrpcSnailJobRequest snailJobRequest = GrpcSnailJobRequest
.newBuilder()
.setMetadata(metadata)
+ .setReqId(reqId)
.setBody(build)
.build();
@@ -103,7 +113,13 @@ public class GrpcChannel {
public static ManagedChannel connect(String hostId, String ip, Integer port) {
try {
+ RpcClientProperties clientRpc = SnailSpringContext.getBean(SystemProperties.class).getClientRpc();
ManagedChannel channel = ManagedChannelBuilder.forAddress(ip, port)
+ .executor(grpcExecutor)
+ .decompressorRegistry(DecompressorRegistry.getDefaultInstance())
+ .maxInboundMessageSize(clientRpc.getMaxInboundMessageSize())
+ .keepAliveTime(clientRpc.getKeepAliveTime().toMillis(), TimeUnit.MILLISECONDS)
+ .keepAliveTimeout(clientRpc.getKeepAliveTimeout().toMillis(), TimeUnit.MILLISECONDS)
.usePlaintext()
.build();
GrpcChannel.setChannel(hostId, ip, channel);
@@ -116,6 +132,18 @@ public class GrpcChannel {
return null;
}
+ private static ThreadPoolExecutor createGrpcExecutor() {
+ RpcClientProperties clientRpc = SnailSpringContext.getBean(SystemProperties.class).getClientRpc();
+ ThreadPoolConfig clientTp = clientRpc.getClientTp();
+ ThreadPoolExecutor grpcExecutor = new ThreadPoolExecutor(clientTp.getCorePoolSize(),
+ clientTp.getMaximumPoolSize(), clientTp.getKeepAliveTime(), TimeUnit.MILLISECONDS,
+ new LinkedBlockingQueue<>(clientTp.getQueueCapacity()),
+ new ThreadFactoryBuilder().setDaemon(true).setNameFormat("snail-job-grpc-client-executor-%d")
+ .build());
+ grpcExecutor.allowCoreThreadTimeOut(true);
+ return grpcExecutor;
+ }
+
/**
* 连接失败处理
*
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/GrpcClientInvokeHandler.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/GrpcClientInvokeHandler.java
index 6a25ab4ff..1581d8261 100644
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/GrpcClientInvokeHandler.java
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/GrpcClientInvokeHandler.java
@@ -48,6 +48,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
/**
* 请求处理器
@@ -59,6 +60,8 @@ import java.util.concurrent.TimeUnit;
@Slf4j
public class GrpcClientInvokeHandler implements InvocationHandler {
+ public static final AtomicLong REQUEST_ID = new AtomicLong(0);
+
private final String groupName;
private String hostId;
private String hostIp;
@@ -143,19 +146,30 @@ public class GrpcClientInvokeHandler implements InvocationHandler {
// 统一设置Token
requestHeaders.put(SystemConstants.SNAIL_JOB_AUTH_TOKEN, CacheToken.get(groupName, namespaceId));
-// SnailJobRequest snailJobRequest = new SnailJobRequest(args);
+ long reqId = newId();
Result result = retryer.call(() -> {
- ListenableFuture future = GrpcChannel.send(hostId, hostIp, hostPort,
- mapping.path(), JsonUtil.toJsonString(args), requestHeaders);
+ StopWatch sw = new StopWatch();
+
+ sw.start("request start " + reqId);
+
+ ListenableFuture future;
+ try {
+ future = GrpcChannel.send(hostId, hostIp, hostPort,
+ mapping.path(), JsonUtil.toJsonString(args), requestHeaders, reqId);
+ } finally {
+ sw.stop();
+ }
+
+ SnailJobLog.LOCAL.debug("request complete requestId:[{}] 耗时:[{}ms]", reqId);
- SnailJobLog.LOCAL.debug("request complete requestId:[{}] 耗时:[{}ms]", 0);
if (async) {
// 暂时不支持异步调用
return null;
} else {
Assert.notNull(future, () -> new SnailJobServerException("completableFuture is null"));
- GrpcResult grpcResult = future.get(Optional.ofNullable(executorTimeout).orElse(20), TimeUnit.SECONDS);
+ GrpcResult grpcResult = future.get(Optional.ofNullable(executorTimeout).orElse(20),
+ TimeUnit.SECONDS);
ByteBuffer byteBuffer = grpcResult.getData().getValue().asReadOnlyByteBuffer();
Object obj = JsonUtil.parseObject(new ByteBufferBackedInputStream(byteBuffer), Object.class);
return new Result(grpcResult.getStatus(), grpcResult.getMessage(), obj);
@@ -260,4 +274,8 @@ public class GrpcClientInvokeHandler implements InvocationHandler {
private Map requestHeaders;
private Map paramMap;
}
+
+ private static long newId() {
+ return REQUEST_ID.getAndIncrement();
+ }
}
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/NettyHttpClientHandler.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/NettyHttpClientHandler.java
index ca83a4060..29c9144fb 100644
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/NettyHttpClientHandler.java
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/client/NettyHttpClientHandler.java
@@ -1,6 +1,6 @@
package com.aizuda.snailjob.server.common.rpc.client;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.rpc.RpcContext;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.log.SnailJobLog;
@@ -32,8 +32,8 @@ public class NettyHttpClientHandler extends SimpleChannelInboundHandler {
throw new SnailJobServerException("class not found exception to: [{}]", clintInterface.getName());
}
- // todo 测试先注释
- RpcClientInvokeHandler clientInvokeHandler = new RpcClientInvokeHandler(
+ SystemProperties properties = SnailSpringContext.getBean(SystemProperties.class);
+ RpcTypeEnum rpcType = properties.getRpcType();
+
+ InvocationHandler invocationHandler;
+ if (Objects.isNull(rpcType) || RpcTypeEnum.NETTY == rpcType) {
+ invocationHandler = new RpcClientInvokeHandler(
nodeInfo.getGroupName(), nodeInfo, failRetry, retryTimes, retryInterval,
retryListener, routeKey, allocKey, failover, executorTimeout, nodeInfo.getNamespaceId());
-
- GrpcClientInvokeHandler grpcClientInvokeHandler = new GrpcClientInvokeHandler(
- nodeInfo.getGroupName(), nodeInfo, failRetry, retryTimes, retryInterval,
- retryListener, routeKey, allocKey, failover, executorTimeout, nodeInfo.getNamespaceId());
+ } else {
+ invocationHandler = new GrpcClientInvokeHandler(
+ nodeInfo.getGroupName(), nodeInfo, failRetry, retryTimes, retryInterval,
+ retryListener, routeKey, allocKey, failover, executorTimeout, nodeInfo.getNamespaceId());
+ }
return (T) Proxy.newProxyInstance(clintInterface.getClassLoader(),
- new Class[]{clintInterface}, grpcClientInvokeHandler);
+ new Class[]{clintInterface}, invocationHandler);
}
}
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/GrpcRequestHandlerActor.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/GrpcRequestHandlerActor.java
index 19cfdf649..d5bf91d71 100644
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/GrpcRequestHandlerActor.java
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/GrpcRequestHandlerActor.java
@@ -9,7 +9,7 @@ import com.aizuda.snailjob.common.core.enums.StatusEnum;
import com.aizuda.snailjob.common.core.grpc.auto.GrpcResult;
import com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest;
import com.aizuda.snailjob.common.core.grpc.auto.Metadata;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.model.SnailJobRequest;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.log.SnailJobLog;
@@ -33,8 +33,6 @@ import io.netty.handler.codec.http.DefaultHttpHeaders;
import io.netty.handler.codec.http.FullHttpResponse;
import io.netty.handler.codec.http.HttpHeaderNames;
import io.netty.handler.codec.http.HttpHeaderValues;
-import io.netty.handler.codec.http.HttpHeaders;
-import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.handler.codec.http.HttpVersion;
import io.netty.util.CharsetUtil;
@@ -46,10 +44,9 @@ import org.springframework.stereotype.Component;
import java.nio.ByteBuffer;
import java.util.Collection;
import java.util.Map;
+import java.util.Objects;
import java.util.Optional;
-import static com.aizuda.snailjob.common.core.alarm.AlarmContext.build;
-
/**
* 处理netty客户端请求
*
@@ -57,7 +54,7 @@ import static com.aizuda.snailjob.common.core.alarm.AlarmContext.build;
* @date : 2023-07-24 09:20
* @since 2.1.0
*/
-@Component(ActorGenerator.REQUEST_HANDLER_ACTOR)
+@Component(ActorGenerator.GRPC_REQUEST_HANDLER_ACTOR)
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Slf4j
public class GrpcRequestHandlerActor extends AbstractActor {
@@ -74,7 +71,7 @@ public class GrpcRequestHandlerActor extends AbstractActor {
}
Map headersMap = metadata.getHeadersMap();
- String result = "";
+ SnailJobRpcResult snailJobRpcResult = null;
try {
SnailJobRequest request = new SnailJobRequest();
Any body = grpcSnailJobRequest.getBody();
@@ -82,22 +79,26 @@ public class GrpcRequestHandlerActor extends AbstractActor {
ByteBuffer byteBuffer = byteString.asReadOnlyByteBuffer();
Object[] objects = JsonUtil.parseObject(new ByteBufferBackedInputStream(byteBuffer), Object[].class);
request.setArgs(objects);
- result = doProcess(uri, JsonUtil.toJsonString(request), headersMap);
+ snailJobRpcResult = doProcess(uri, JsonUtil.toJsonString(request), headersMap);
+ if (Objects.isNull(snailJobRpcResult)) {
+ snailJobRpcResult = new SnailJobRpcResult(StatusEnum.NO.getStatus(), "服务端异常", null,
+ grpcSnailJobRequest.getReqId());
+ }
} catch (Exception e) {
- SnailJobLog.LOCAL.error("http request error. [{}]",grpcSnailJobRequest, e);
- result = JsonUtil.toJsonString(new NettyResult(StatusEnum.NO.getStatus(), e.getMessage(), null, 0));
+ SnailJobLog.LOCAL.error("http request error. [{}]", grpcSnailJobRequest, e);
+ snailJobRpcResult = new SnailJobRpcResult(StatusEnum.NO.getStatus(), e.getMessage(), null,
+ grpcSnailJobRequest.getReqId());
} finally {
-
- NettyResult nettyResult = JsonUtil.parseObject(result, NettyResult.class);
StreamObserver streamObserver = grpcRequest.getStreamObserver();
GrpcResult grpcResult = GrpcResult.newBuilder()
- .setStatus(nettyResult.getStatus())
- .setMessage(Optional.ofNullable(nettyResult.getMessage()).orElse(StrUtil.EMPTY))
+ .setReqId(snailJobRpcResult.getReqId())
+ .setStatus(snailJobRpcResult.getStatus())
+ .setMessage(Optional.ofNullable(snailJobRpcResult.getMessage()).orElse(StrUtil.EMPTY))
.setData(Any.newBuilder()
- .setValue(UnsafeByteOperations.unsafeWrap(JsonUtil.toJsonString(nettyResult.getData()).getBytes()))
- .build())
+ .setValue(UnsafeByteOperations.unsafeWrap(
+ JsonUtil.toJsonString(snailJobRpcResult.getData()).getBytes()))
+ .build())
.build();
-
streamObserver.onNext(grpcResult);
streamObserver.onCompleted();
getContext().stop(getSelf());
@@ -107,7 +108,7 @@ public class GrpcRequestHandlerActor extends AbstractActor {
}).build();
}
- private String doProcess(String uri, String content, Map headersMap) {
+ private SnailJobRpcResult doProcess(String uri, String content, Map headersMap) {
Register register = SnailSpringContext.getBean(ClientRegister.BEAN_NAME, Register.class);
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/GrpcServer.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/GrpcServer.java
new file mode 100644
index 000000000..477344566
--- /dev/null
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/GrpcServer.java
@@ -0,0 +1,141 @@
+package com.aizuda.snailjob.server.common.rpc.server;
+
+import com.aizuda.snailjob.common.core.constant.GrpcServerConstants;
+import com.aizuda.snailjob.common.core.enums.RpcTypeEnum;
+import com.aizuda.snailjob.common.core.grpc.auto.GrpcResult;
+import com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest;
+import com.aizuda.snailjob.common.log.SnailJobLog;
+import com.aizuda.snailjob.server.common.Lifecycle;
+import com.aizuda.snailjob.server.common.config.SystemProperties;
+import com.aizuda.snailjob.server.common.config.SystemProperties.RpcServerProperties;
+import com.aizuda.snailjob.server.common.config.SystemProperties.ThreadPoolConfig;
+import com.aizuda.snailjob.server.common.exception.SnailJobServerException;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import io.grpc.CompressorRegistry;
+import io.grpc.DecompressorRegistry;
+import io.grpc.MethodDescriptor;
+import io.grpc.Server;
+import io.grpc.ServerInterceptor;
+import io.grpc.ServerInterceptors;
+import io.grpc.ServerServiceDefinition;
+import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder;
+import io.grpc.protobuf.ProtoUtils;
+import io.grpc.stub.ServerCalls;
+import io.grpc.util.MutableHandlerRegistry;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.time.Duration;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * netty server
+ *
+ * @author: opensnail
+ * @date : 2022-03-07 15:54
+ * @since 1.0.0
+ */
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
+@RequiredArgsConstructor
+@Getter
+public class GrpcServer implements Lifecycle {
+
+ private final SystemProperties systemProperties;
+ private volatile boolean started = false;
+ private Server server;
+
+ @Override
+ public void start() {
+ // 防止重复启动
+ if (started) {
+ return;
+ }
+
+ if (RpcTypeEnum.GPRC != systemProperties.getRpcType()) {
+ return;
+ }
+
+ RpcServerProperties grpc = systemProperties.getServerRpc();
+
+ final MutableHandlerRegistry handlerRegistry = new MutableHandlerRegistry();
+ addServices(handlerRegistry, new GrpcInterceptor());
+ NettyServerBuilder builder = NettyServerBuilder.forPort(systemProperties.getNettyPort())
+ .executor(createGrpcExecutor(grpc.getDispatcherTp()));
+
+ Duration keepAliveTime = grpc.getKeepAliveTime();
+ Duration keepAliveTimeOut = grpc.getKeepAliveTimeout();
+ Duration permitKeepAliveTime = grpc.getPermitKeepAliveTime();
+
+ server = builder.maxInboundMessageSize(grpc.getMaxInboundMessageSize()).fallbackHandlerRegistry(handlerRegistry)
+ .compressorRegistry(CompressorRegistry.getDefaultInstance())
+ .decompressorRegistry(DecompressorRegistry.getDefaultInstance())
+ .keepAliveTime(keepAliveTime.toMillis(), TimeUnit.MILLISECONDS)
+ .keepAliveTimeout(keepAliveTimeOut.toMillis(), TimeUnit.MILLISECONDS)
+ .permitKeepAliveTime(permitKeepAliveTime.toMillis(), TimeUnit.MILLISECONDS)
+ .build();
+ try {
+ server.start();
+ this.started = true;
+ SnailJobLog.LOCAL.info("------> snail-job remoting server start success, grpc = {}, port = {}",
+ GrpcServer.class.getName(), systemProperties.getNettyPort());
+ } catch (IOException e) {
+ SnailJobLog.LOCAL.error("--------> snail-job remoting server error.", e);
+ started = false;
+ throw new SnailJobServerException("snail-job server start error");
+ }
+ }
+
+ @Override
+ public void close() {
+ if (server != null) {
+ server.shutdownNow();
+ }
+ }
+
+ private void addServices(MutableHandlerRegistry handlerRegistry, ServerInterceptor... serverInterceptor) {
+
+ // 创建服务UNARY类型定义
+ ServerServiceDefinition serviceDefinition = createUnaryServiceDefinition(
+ GrpcServerConstants.UNARY_SERVICE_NAME, GrpcServerConstants.UNARY_METHOD_NAME,
+ new UnaryRequestHandler());
+ handlerRegistry.addService(serviceDefinition);
+ // unary common call register.
+
+ handlerRegistry.addService(ServerInterceptors.intercept(serviceDefinition, serverInterceptor));
+ }
+
+ public static ServerServiceDefinition createUnaryServiceDefinition(
+ String serviceName,
+ String methodName,
+ ServerCalls.UnaryMethod unaryMethod) {
+
+ MethodDescriptor methodDescriptor =
+ MethodDescriptor.newBuilder()
+ .setType(MethodDescriptor.MethodType.UNARY)
+ .setFullMethodName(MethodDescriptor.generateFullMethodName(serviceName, methodName))
+ .setRequestMarshaller(ProtoUtils.marshaller(GrpcSnailJobRequest.getDefaultInstance()))
+ .setResponseMarshaller(ProtoUtils.marshaller(GrpcResult.getDefaultInstance()))
+ .build();
+
+ return ServerServiceDefinition.builder(serviceName)
+ .addMethod(methodDescriptor, ServerCalls.asyncUnaryCall(unaryMethod))
+ .build();
+ }
+
+ private ThreadPoolExecutor createGrpcExecutor(final ThreadPoolConfig threadPool) {
+ ThreadPoolExecutor grpcExecutor = new ThreadPoolExecutor(threadPool.getCorePoolSize(),
+ threadPool.getMaximumPoolSize(), threadPool.getKeepAliveTime(), TimeUnit.MILLISECONDS,
+ new LinkedBlockingQueue<>(threadPool.getQueueCapacity()),
+ new ThreadFactoryBuilder().setDaemon(true).setNameFormat("snail-job-grpc-server-executor-%d")
+ .build());
+ grpcExecutor.allowCoreThreadTimeOut(true);
+ return grpcExecutor;
+ }
+}
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/GrpcServerConsumerConfig.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/GrpcServerConsumerConfig.java
deleted file mode 100644
index 76ea99c99..000000000
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/GrpcServerConsumerConfig.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.aizuda.snailjob.server.common.rpc.server;
-
-import com.aizuda.snailjob.common.core.grpc.auto.GrpcResult;
-import com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest;
-import io.grpc.MethodDescriptor;
-import io.grpc.ServerBuilder;
-import io.grpc.ServerCallHandler;
-import io.grpc.ServerServiceDefinition;
-import io.grpc.protobuf.ProtoUtils;
-import io.grpc.stub.ServerCalls;
-import net.devh.boot.grpc.server.serverfactory.GrpcServerConfigurer;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class GrpcServerConsumerConfig implements GrpcServerConfigurer {
-
- @Override
- public void accept(ServerBuilder> serverBuilder) {
- // 创建服务定义
- ServerServiceDefinition serviceDefinition = createServiceDefinition(
- "UnaryRequest", "unaryRequest",
- new UnaryRequestHandler());
- serverBuilder.addService(serviceDefinition);
- serverBuilder.intercept(new GrpcInterceptor());
- }
-
- public static ServerServiceDefinition createServiceDefinition(
- String serviceName,
- String methodName,
- ServerCalls.UnaryMethod unaryMethod) {
-
- MethodDescriptor methodDescriptor =
- MethodDescriptor.newBuilder()
- .setType(MethodDescriptor.MethodType.UNARY)
- .setFullMethodName(MethodDescriptor.generateFullMethodName(serviceName, methodName))
- .setRequestMarshaller(ProtoUtils.marshaller(GrpcSnailJobRequest.getDefaultInstance()))
- .setResponseMarshaller(ProtoUtils.marshaller(GrpcResult.getDefaultInstance()))
- .build();
-
- ServerCallHandler callHandler = ServerCalls.asyncUnaryCall(unaryMethod);
-
- return ServerServiceDefinition.builder(serviceName)
- .addMethod(methodDescriptor, callHandler)
- .build();
- }
-}
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/NettyHttpServer.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/NettyHttpServer.java
index 2990db886..759d69a53 100644
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/NettyHttpServer.java
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/NettyHttpServer.java
@@ -1,5 +1,6 @@
package com.aizuda.snailjob.server.common.rpc.server;
+import com.aizuda.snailjob.common.core.enums.RpcTypeEnum;
import com.aizuda.snailjob.common.log.SnailJobLog;
import com.aizuda.snailjob.server.common.Lifecycle;
import com.aizuda.snailjob.server.common.config.SystemProperties;
@@ -63,7 +64,7 @@ public class NettyHttpServer implements Runnable, Lifecycle {
}
});
- // 在特定端口绑定并启动服务器 默认是1788
+ // 在特定端口绑定并启动服务器 默认是17888
ChannelFuture future = bootstrap.bind(systemProperties.getNettyPort()).sync();
SnailJobLog.LOCAL.info("------> snail-job remoting server start success, nettype = {}, port = {}",
@@ -87,9 +88,12 @@ public class NettyHttpServer implements Runnable, Lifecycle {
@Override
public void start() {
-// thread = new Thread(this);
-// thread.setDaemon(true);
-// thread.start();
+ if (RpcTypeEnum.NETTY != systemProperties.getRpcType()) {
+ return;
+ }
+ thread = new Thread(this);
+ thread.setDaemon(true);
+ thread.start();
}
@Override
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 ea7e9ae91..0a12b3ce1 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
@@ -6,7 +6,7 @@ import cn.hutool.core.util.StrUtil;
import com.aizuda.snailjob.common.core.context.SnailSpringContext;
import com.aizuda.snailjob.common.core.enums.HeadersEnum;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.model.SnailJobRequest;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.log.SnailJobLog;
@@ -36,8 +36,8 @@ import java.util.Collection;
* @date : 2023-07-24 09:20
* @since 2.1.0
*/
-//@Component(ActorGenerator.REQUEST_HANDLER_ACTOR)
-//@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+@Component(ActorGenerator.REQUEST_HANDLER_ACTOR)
+@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Slf4j
public class RequestHandlerActor extends AbstractActor {
@@ -58,15 +58,15 @@ public class RequestHandlerActor extends AbstractActor {
final String content = nettyHttpRequest.getContent();
final HttpHeaders headers = nettyHttpRequest.getHeaders();
- String result = "";
+ SnailJobRpcResult result = null;
try {
result = doProcess(uri, content, method, headers);
} catch (Exception e) {
SnailJobLog.LOCAL.error("http request error. [{}]", nettyHttpRequest.getContent(), e);
SnailJobRequest retryRequest = JsonUtil.parseObject(content, SnailJobRequest.class);
- result = JsonUtil.toJsonString(new NettyResult(StatusEnum.NO.getStatus(), e.getMessage(), null, retryRequest.getReqId()));
+ result = new SnailJobRpcResult(StatusEnum.NO.getStatus(), e.getMessage(), null, retryRequest.getReqId());
} finally {
- writeResponse(channelHandlerContext, keepAlive, result);
+ writeResponse(channelHandlerContext, keepAlive, JsonUtil.toJsonString(result));
getContext().stop(getSelf());
}
@@ -74,7 +74,7 @@ public class RequestHandlerActor extends AbstractActor {
}).build();
}
- private String doProcess(String uri, String content, HttpMethod method,
+ private SnailJobRpcResult doProcess(String uri, String content, HttpMethod method,
HttpHeaders headers) {
Register register = SnailSpringContext.getBean(ClientRegister.BEAN_NAME, Register.class);
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/UnaryRequestHandler.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/UnaryRequestHandler.java
index f9b3ffe00..e633a7efb 100644
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/UnaryRequestHandler.java
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/rpc/server/UnaryRequestHandler.java
@@ -6,11 +6,8 @@ import com.aizuda.snailjob.common.core.grpc.auto.GrpcSnailJobRequest;
import com.aizuda.snailjob.common.core.grpc.auto.Metadata;
import com.aizuda.snailjob.server.common.akka.ActorGenerator;
import com.aizuda.snailjob.server.common.dto.GrpcRequest;
-import com.aizuda.snailjob.server.common.dto.NettyHttpRequest;
import io.grpc.stub.ServerCalls;
import io.grpc.stub.StreamObserver;
-import io.netty.handler.codec.http.HttpUtil;
-import io.netty.util.CharsetUtil;
/**
* @author: opensnail
@@ -20,9 +17,6 @@ public class UnaryRequestHandler implements ServerCalls.UnaryMethod streamObserver) {
- // 处理请求并返回响应
-// GrpcResult result = GrpcResult.newBuilder().setMessage("调度成功").setStatus(1).build();
-
Metadata metadata = snailJobRequest.getMetadata();
GrpcRequest grpcRequest = GrpcRequest.builder()
.uri(metadata.getUri())
@@ -30,11 +24,7 @@ public class UnaryRequestHandler implements ServerCalls.UnaryMethod taskList = taskInstance.generate(context);
if (CollUtil.isEmpty(taskList)) {
- return JsonUtil.toJsonString(
- new NettyResult(StatusEnum.NO.getStatus(), "Job task is empty", Boolean.FALSE,
- retryRequest.getReqId()));
+ return new SnailJobRpcResult(StatusEnum.NO.getStatus(), "Job task is empty", Boolean.FALSE,
+ retryRequest.getReqId());
}
String newWfContext = null;
@@ -111,9 +109,8 @@ public class MapTaskPostHttpRequestHandler extends PostHttpRequestHandler {
JobExecutor jobExecutor = JobExecutorFactory.getJobExecutor(JobTaskTypeEnum.MAP_REDUCE.getType());
jobExecutor.execute(buildJobExecutorContext(mapTaskRequest, job, taskList, newWfContext));
- return JsonUtil.toJsonString(
- new NettyResult(StatusEnum.YES.getStatus(), "Report Map Task Processed Successfully", Boolean.TRUE,
- retryRequest.getReqId()));
+ return new SnailJobRpcResult(StatusEnum.YES.getStatus(), "Report Map Task Processed Successfully", Boolean.TRUE,
+ retryRequest.getReqId());
}
private static JobExecutorContext buildJobExecutorContext(MapTaskRequest mapTaskRequest, Job job,
diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/request/ReportDispatchResultPostHttpRequestHandler.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/request/ReportDispatchResultPostHttpRequestHandler.java
index 83a579fd8..7829f15ce 100644
--- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/request/ReportDispatchResultPostHttpRequestHandler.java
+++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/request/ReportDispatchResultPostHttpRequestHandler.java
@@ -4,7 +4,7 @@ import cn.hutool.core.net.url.UrlQuery;
import com.aizuda.snailjob.client.model.request.DispatchJobResultRequest;
import com.aizuda.snailjob.common.core.enums.HeadersEnum;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.model.SnailJobRequest;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.log.SnailJobLog;
@@ -15,7 +15,6 @@ import com.aizuda.snailjob.server.job.task.support.callback.ClientCallbackContex
import com.aizuda.snailjob.server.job.task.support.callback.ClientCallbackFactory;
import io.netty.handler.codec.http.HttpHeaders;
import io.netty.handler.codec.http.HttpMethod;
-import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import static com.aizuda.snailjob.common.core.constant.SystemConstants.HTTP_PATH.REPORT_JOB_DISPATCH_RESULT;
@@ -39,7 +38,7 @@ public class ReportDispatchResultPostHttpRequestHandler extends PostHttpRequestH
}
@Override
- public String doHandler(String content, UrlQuery query, HttpHeaders headers) {
+ public SnailJobRpcResult doHandler(String content, UrlQuery query, HttpHeaders headers) {
SnailJobLog.LOCAL.debug("Client Callback Request. content:[{}]", content);
SnailJobRequest retryRequest = JsonUtil.parseObject(content, SnailJobRequest.class);
@@ -53,6 +52,6 @@ public class ReportDispatchResultPostHttpRequestHandler extends PostHttpRequestH
context.setNamespaceId(headers.getAsString(HeadersEnum.NAMESPACE.getKey()));
clientCallback.callback(context);
- return JsonUtil.toJsonString(new NettyResult(StatusEnum.YES.getStatus(), "Report Dispatch Result Processed Successfully", Boolean.TRUE, retryRequest.getReqId()));
+ return new SnailJobRpcResult(StatusEnum.YES.getStatus(), "Report Dispatch Result Processed Successfully", Boolean.TRUE, retryRequest.getReqId());
}
}
diff --git a/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/handler/ReportRetryInfoHttpRequestHandler.java b/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/handler/ReportRetryInfoHttpRequestHandler.java
index be9c118a5..b160da9a6 100644
--- a/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/handler/ReportRetryInfoHttpRequestHandler.java
+++ b/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/handler/ReportRetryInfoHttpRequestHandler.java
@@ -4,7 +4,7 @@ import cn.hutool.core.lang.Assert;
import cn.hutool.core.net.url.UrlQuery;
import com.aizuda.snailjob.common.core.enums.HeadersEnum;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
-import com.aizuda.snailjob.common.core.model.NettyResult;
+import com.aizuda.snailjob.common.core.model.SnailJobRpcResult;
import com.aizuda.snailjob.common.core.model.SnailJobRequest;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.core.util.StreamUtils;
@@ -61,7 +61,7 @@ public class ReportRetryInfoHttpRequestHandler extends PostHttpRequestHandler {
@Override
@Transactional
- public String doHandler(String content, UrlQuery urlQuery, HttpHeaders headers) {
+ public SnailJobRpcResult doHandler(String content, UrlQuery urlQuery, HttpHeaders headers) {
SnailJobLog.LOCAL.debug("Batch Report Retry Data. content:[{}]", content);
SnailJobRequest retryRequest = JsonUtil.parseObject(content, SnailJobRequest.class);
@@ -121,7 +121,7 @@ public class ReportRetryInfoHttpRequestHandler extends PostHttpRequestHandler {
return null;
});
- return JsonUtil.toJsonString(new NettyResult(StatusEnum.YES.getStatus(), "Batch Retry Data Upload Processed Successfully", Boolean.TRUE, retryRequest.getReqId()));
+ return new SnailJobRpcResult(StatusEnum.YES.getStatus(), "Batch Retry Data Upload Processed Successfully", Boolean.TRUE, retryRequest.getReqId());
} catch (Exception e) {
Throwable throwable = e;
@@ -131,7 +131,7 @@ public class ReportRetryInfoHttpRequestHandler extends PostHttpRequestHandler {
}
SnailJobLog.LOCAL.error("Batch Report Retry Data Error. <|>{}<|>", args[0], throwable);
- return JsonUtil.toJsonString(new NettyResult(StatusEnum.YES.getStatus(), throwable.getMessage(), Boolean.FALSE, retryRequest.getReqId()));
+ return new SnailJobRpcResult(StatusEnum.YES.getStatus(), throwable.getMessage(), Boolean.FALSE, retryRequest.getReqId());
}
}
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/application.yml b/snail-job-server/snail-job-server-starter/src/main/resources/application.yml
index 19e3fab19..b5ab147c8 100644
--- a/snail-job-server/snail-job-server-starter/src/main/resources/application.yml
+++ b/snail-job-server/snail-job-server-starter/src/main/resources/application.yml
@@ -75,14 +75,11 @@ logging:
# level:
# ## 方便调试 SQL
# com.aizuda.snailjob.template.datasource.persistence.mapper: debug
-grpc:
- server:
- port: 1788
snail-job:
retry-pull-page-size: 1000 # 拉取重试数据的每批次的大小
job-pull-page-size: 1000 # 拉取重试数据的每批次的大小
- netty-port: 1788 # 服务端netty端口
+ netty-port: 17888 # 服务端netty端口
limiter: 1000 # 一个客户端每秒最多接收的重试数量指令
step: 100 # 号段模式下步长配置
log-storage: 45 # 日志保存时间(单位: day)
@@ -90,3 +87,4 @@ snail-job:
max-count: 288 #回调最大执行次数
trigger-interval: 900 #间隔时间
retry-max-pull-count: 10
+ rpc-type: gprc