feat: use kryo to replace jackson which is really easy to lead conflict

This commit is contained in:
tjq 2021-03-21 15:08:48 +08:00
parent 4399f99c42
commit e767ad1043
29 changed files with 88 additions and 39 deletions

View File

@ -12,7 +12,7 @@ import tech.powerjob.common.request.query.JobInfoQuery;
import tech.powerjob.common.response.*; import tech.powerjob.common.response.*;
import tech.powerjob.common.utils.CommonUtils; import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.common.utils.HttpUtils; import tech.powerjob.common.utils.HttpUtils;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import okhttp3.FormBody; import okhttp3.FormBody;

View File

@ -20,6 +20,8 @@
<guava.version>29.0-jre</guava.version> <guava.version>29.0-jre</guava.version>
<okhttp.version>3.14.9</okhttp.version> <okhttp.version>3.14.9</okhttp.version>
<akka.version>2.6.12</akka.version> <akka.version>2.6.12</akka.version>
<kryo.version>5.0.4</kryo.version>
<jackson.version>2.12.2</jackson.version>
<junit.version>5.6.1</junit.version> <junit.version>5.6.1</junit.version>
</properties> </properties>
@ -58,11 +60,6 @@
<artifactId>akka-remote_2.13</artifactId> <artifactId>akka-remote_2.13</artifactId>
<version>${akka.version}</version> <version>${akka.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-serialization-jackson_2.13</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.typesafe.akka</groupId> <groupId>com.typesafe.akka</groupId>
<artifactId>akka-slf4j_2.13</artifactId> <artifactId>akka-slf4j_2.13</artifactId>
@ -76,6 +73,26 @@
<version>${commons.io.version}</version> <version>${commons.io.version}</version>
</dependency> </dependency>
<!-- kryo 超超超高性能序列化框架 -->
<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>kryo</artifactId>
<version>${kryo.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- Junit tests --> <!-- Junit tests -->
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>

View File

@ -1,7 +1,7 @@
package tech.powerjob.common.response; package tech.powerjob.common.response;
import tech.powerjob.common.PowerSerializable; import tech.powerjob.common.PowerSerializable;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import lombok.*; import lombok.*;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;

View File

@ -1,4 +1,4 @@
package tech.powerjob.common.utils; package tech.powerjob.common.serialize;
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;

View File

@ -0,0 +1,32 @@
package tech.powerjob.common.serialize;
import akka.serialization.JSerializer;
/**
* Using custom serializers for akka-remote
*
* @author tjq
* @since 2021/3/21
*/
public class PowerAkkaSerializer extends JSerializer {
@Override
public Object fromBinaryJava(byte[] bytes, Class<?> manifest) {
return SerializerUtils.deSerialized(bytes);
}
@Override
public int identifier() {
return 277777;
}
@Override
public byte[] toBinary(Object o) {
return SerializerUtils.serialize(o);
}
@Override
public boolean includeManifest() {
return false;
}
}

View File

@ -1,4 +1,4 @@
package tech.powerjob.worker.common.utils; package tech.powerjob.common.serialize;
import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.Kryo;

View File

@ -7,7 +7,7 @@ import tech.powerjob.common.model.GitRepoInfo;
import tech.powerjob.common.request.ServerDeployContainerRequest; import tech.powerjob.common.request.ServerDeployContainerRequest;
import tech.powerjob.common.request.ServerDestroyContainerRequest; import tech.powerjob.common.request.ServerDestroyContainerRequest;
import tech.powerjob.common.utils.CommonUtils; import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.common.utils.NetUtils; import tech.powerjob.common.utils.NetUtils;
import tech.powerjob.common.utils.SegmentLock; import tech.powerjob.common.utils.SegmentLock;
import tech.powerjob.server.common.constants.ContainerSourceType; import tech.powerjob.server.common.constants.ContainerSourceType;

View File

@ -15,7 +15,7 @@ import tech.powerjob.server.remote.transport.starter.VertXStarter;
import tech.powerjob.server.remote.worker.WorkerClusterQueryService; import tech.powerjob.server.remote.worker.WorkerClusterQueryService;
import tech.powerjob.server.common.module.WorkerInfo; import tech.powerjob.server.common.module.WorkerInfo;
import tech.powerjob.common.response.AskResponse; import tech.powerjob.common.response.AskResponse;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.common.utils.NetUtils; import tech.powerjob.common.utils.NetUtils;
import tech.powerjob.server.common.constants.SwitchableStatus; import tech.powerjob.server.common.constants.SwitchableStatus;
import tech.powerjob.server.common.utils.SpringUtils; import tech.powerjob.server.common.utils.SpringUtils;

View File

@ -16,7 +16,7 @@ import tech.powerjob.common.enums.TimeExpressionType;
import tech.powerjob.common.enums.WorkflowInstanceStatus; import tech.powerjob.common.enums.WorkflowInstanceStatus;
import tech.powerjob.common.enums.WorkflowNodeType; import tech.powerjob.common.enums.WorkflowNodeType;
import tech.powerjob.common.model.PEWorkflowDAG; import tech.powerjob.common.model.PEWorkflowDAG;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.server.common.constants.SwitchableStatus; import tech.powerjob.server.common.constants.SwitchableStatus;
import tech.powerjob.server.core.DispatchService; import tech.powerjob.server.core.DispatchService;
import tech.powerjob.server.core.instance.InstanceService; import tech.powerjob.server.core.instance.InstanceService;

View File

@ -4,7 +4,7 @@ import tech.powerjob.common.enums.InstanceStatus;
import tech.powerjob.common.exception.PowerJobException; import tech.powerjob.common.exception.PowerJobException;
import tech.powerjob.common.SystemInstanceResult; import tech.powerjob.common.SystemInstanceResult;
import tech.powerjob.common.model.PEWorkflowDAG; import tech.powerjob.common.model.PEWorkflowDAG;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import com.google.common.collect.*; import com.google.common.collect.*;
import java.util.*; import java.util.*;

View File

@ -2,7 +2,7 @@ package tech.powerjob.server.remote.server;
import akka.actor.AbstractActor; import akka.actor.AbstractActor;
import tech.powerjob.common.response.AskResponse; import tech.powerjob.common.response.AskResponse;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.server.remote.server.election.Ping; import tech.powerjob.server.remote.server.election.Ping;
import tech.powerjob.server.remote.server.redirector.RemoteProcessReq; import tech.powerjob.server.remote.server.redirector.RemoteProcessReq;
import tech.powerjob.server.remote.server.redirector.RemoteRequestProcessor; import tech.powerjob.server.remote.server.redirector.RemoteRequestProcessor;

View File

@ -6,7 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import tech.powerjob.common.exception.PowerJobException; import tech.powerjob.common.exception.PowerJobException;
import tech.powerjob.common.enums.Protocol; import tech.powerjob.common.enums.Protocol;
import tech.powerjob.common.response.AskResponse; import tech.powerjob.common.response.AskResponse;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.server.extension.LockService; import tech.powerjob.server.extension.LockService;
import tech.powerjob.server.persistence.remote.model.AppInfoDO; import tech.powerjob.server.persistence.remote.model.AppInfoDO;
import tech.powerjob.server.persistence.remote.repository.AppInfoRepository; import tech.powerjob.server.persistence.remote.repository.AppInfoRepository;

View File

@ -8,8 +8,12 @@ akka {
provider = remote provider = remote
allow-java-serialization = off allow-java-serialization = off
serializers {
power-serializer = "tech.powerjob.common.serialize.PowerAkkaSerializer"
}
serialization-bindings { serialization-bindings {
"tech.powerjob.common.PowerSerializable" = jackson-cbor "tech.powerjob.common.PowerSerializable" = power-serializer
} }
} }
remote { remote {

View File

@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import tech.powerjob.common.enums.InstanceStatus; import tech.powerjob.common.enums.InstanceStatus;
import tech.powerjob.common.model.PEWorkflowDAG; import tech.powerjob.common.model.PEWorkflowDAG;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.server.core.workflow.algorithm.WorkflowDAGUtils; import tech.powerjob.server.core.workflow.algorithm.WorkflowDAGUtils;
import tech.powerjob.server.core.workflow.algorithm.WorkflowDAG; import tech.powerjob.server.core.workflow.algorithm.WorkflowDAG;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;

View File

@ -1,6 +1,6 @@
package tech.powerjob.samples.processors; package tech.powerjob.samples.processors;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.samples.MysteryService; import tech.powerjob.samples.MysteryService;
import tech.powerjob.worker.core.processor.ProcessResult; import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.core.processor.TaskContext;

View File

@ -2,7 +2,7 @@ package tech.powerjob.samples.processors;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.worker.core.processor.ProcessResult; import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.TaskResult; import tech.powerjob.worker.core.processor.TaskResult;

View File

@ -19,7 +19,6 @@
<h2.db.version>1.4.200</h2.db.version> <h2.db.version>1.4.200</h2.db.version>
<hikaricp.version>3.4.2</hikaricp.version> <hikaricp.version>3.4.2</hikaricp.version>
<junit.version>5.6.1</junit.version> <junit.version>5.6.1</junit.version>
<kryo.version>5.0.0-RC5</kryo.version>
<logback.version>1.2.3</logback.version> <logback.version>1.2.3</logback.version>
</properties> </properties>
@ -53,13 +52,6 @@
<version>${hikaricp.version}</version> <version>${hikaricp.version}</version>
</dependency> </dependency>
<!-- kryo 超超超高性能序列化框架 -->
<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>kryo</artifactId>
<version>${kryo.version}</version>
</dependency>
<!-- Junit 测试 --> <!-- Junit 测试 -->
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>

View File

@ -10,7 +10,7 @@ import tech.powerjob.common.RemoteConstant;
import tech.powerjob.common.response.ResultDTO; import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.common.utils.CommonUtils; import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.common.utils.HttpUtils; import tech.powerjob.common.utils.HttpUtils;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.common.utils.NetUtils; import tech.powerjob.common.utils.NetUtils;
import tech.powerjob.worker.actors.ProcessorTrackerActor; import tech.powerjob.worker.actors.ProcessorTrackerActor;
import tech.powerjob.worker.actors.TaskTrackerActor; import tech.powerjob.worker.actors.TaskTrackerActor;

View File

@ -3,7 +3,7 @@ package tech.powerjob.worker.background;
import tech.powerjob.common.exception.PowerJobException; import tech.powerjob.common.exception.PowerJobException;
import tech.powerjob.common.response.ResultDTO; import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.common.utils.CommonUtils; import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.common.utils.HttpUtils; import tech.powerjob.common.utils.HttpUtils;
import tech.powerjob.worker.common.PowerJobWorkerConfig; import tech.powerjob.worker.common.PowerJobWorkerConfig;
import tech.powerjob.worker.core.tracker.task.TaskTracker; import tech.powerjob.worker.core.tracker.task.TaskTracker;

View File

@ -1,6 +1,6 @@
package tech.powerjob.worker.common.utils; package tech.powerjob.worker.common.utils;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import java.util.Map; import java.util.Map;

View File

@ -7,7 +7,7 @@ import tech.powerjob.worker.common.ThreadLocalStore;
import tech.powerjob.worker.common.constants.TaskConstant; import tech.powerjob.worker.common.constants.TaskConstant;
import tech.powerjob.worker.common.constants.TaskStatus; import tech.powerjob.worker.common.constants.TaskStatus;
import tech.powerjob.worker.common.utils.AkkaUtils; import tech.powerjob.worker.common.utils.AkkaUtils;
import tech.powerjob.worker.common.utils.SerializerUtils; import tech.powerjob.common.serialize.SerializerUtils;
import tech.powerjob.worker.common.utils.WorkflowContextUtils; import tech.powerjob.worker.common.utils.WorkflowContextUtils;
import tech.powerjob.worker.core.processor.ProcessResult; import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.core.processor.TaskContext;

View File

@ -1,7 +1,7 @@
package tech.powerjob.worker.core.processor; package tech.powerjob.worker.core.processor;
import tech.powerjob.common.WorkflowContextConstant; import tech.powerjob.common.WorkflowContextConstant;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@ -12,7 +12,7 @@ import tech.powerjob.common.request.TaskTrackerReportInstanceStatusReq;
import tech.powerjob.common.request.WorkerQueryExecutorClusterReq; import tech.powerjob.common.request.WorkerQueryExecutorClusterReq;
import tech.powerjob.common.response.AskResponse; import tech.powerjob.common.response.AskResponse;
import tech.powerjob.common.utils.CommonUtils; import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.common.utils.SegmentLock; import tech.powerjob.common.utils.SegmentLock;
import tech.powerjob.worker.common.WorkerRuntime; import tech.powerjob.worker.common.WorkerRuntime;
import tech.powerjob.worker.common.constants.TaskConstant; import tech.powerjob.worker.common.constants.TaskConstant;

View File

@ -2,7 +2,7 @@ package tech.powerjob.worker.pojo.request;
import tech.powerjob.common.PowerSerializable; import tech.powerjob.common.PowerSerializable;
import tech.powerjob.worker.common.ThreadLocalStore; import tech.powerjob.worker.common.ThreadLocalStore;
import tech.powerjob.worker.common.utils.SerializerUtils; import tech.powerjob.common.serialize.SerializerUtils;
import tech.powerjob.worker.persistence.TaskDO; import tech.powerjob.worker.persistence.TaskDO;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View File

@ -8,8 +8,12 @@ akka {
provider = remote provider = remote
allow-java-serialization = off allow-java-serialization = off
serializers {
power-serializer = "tech.powerjob.common.serialize.PowerAkkaSerializer"
}
serialization-bindings { serialization-bindings {
"tech.powerjob.common.PowerSerializable" = jackson-cbor "tech.powerjob.common.PowerSerializable" = power-serializer
} }
} }
remote { remote {

View File

@ -1,7 +1,7 @@
package tech.powerjob.worker.test.function; package tech.powerjob.worker.test.function;
import tech.powerjob.common.model.SystemMetrics; import tech.powerjob.common.model.SystemMetrics;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.worker.common.utils.SystemInfoUtils; import tech.powerjob.worker.common.utils.SystemInfoUtils;
import com.google.common.base.Stopwatch; import com.google.common.base.Stopwatch;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;

View File

@ -1,6 +1,6 @@
package tech.powerjob.worker.test.processors; package tech.powerjob.worker.test.processors;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.worker.core.processor.ProcessResult; import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.sdk.BasicProcessor; import tech.powerjob.worker.core.processor.sdk.BasicProcessor;

View File

@ -1,6 +1,6 @@
package tech.powerjob.worker.test.processors; package tech.powerjob.worker.test.processors;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.worker.core.processor.ProcessResult; import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.TaskResult; import tech.powerjob.worker.core.processor.TaskResult;

View File

@ -1,6 +1,6 @@
package tech.powerjob.worker.test.processors; package tech.powerjob.worker.test.processors;
import tech.powerjob.common.utils.JsonUtils; import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.worker.core.processor.ProcessResult; import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.TaskResult; import tech.powerjob.worker.core.processor.TaskResult;