Commit 1297cb2f by huangfusuper

初始化java任务处理解释器

parent fcd610c6
...@@ -12,4 +12,19 @@ ...@@ -12,4 +12,19 @@
<artifactId>byit-myth-admin</artifactId> <artifactId>byit-myth-admin</artifactId>
<dependencies>
<dependency>
<groupId>myth-job</groupId>
<artifactId>myth-admin-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project> </project>
\ No newline at end of file
...@@ -13,4 +13,31 @@ ...@@ -13,4 +13,31 @@
<artifactId>myth-admin-core</artifactId> <artifactId>myth-admin-core</artifactId>
<dependencies>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>myth-executor-core</artifactId>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>byit-myth-rpc</artifactId>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>myth-executor-api</artifactId>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>myth-core-common</artifactId>
</dependency>
</dependencies>
</project> </project>
\ No newline at end of file
package com.byit.job;
import com.byit.job.handler.interfaces.IJobHandler;
import com.byit.job.instancecache.JavaBeanInstanceCache;
import com.byit.task.JobTask;
import io.netty.util.HashedWheelTimer;
import java.util.TimerTask;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
/**
* @program: byit-myth-job->WorkRoulette
* @description: 工作轮盘,所有的添加任务 删除任务 暂停任务都在此列
* @author: huangfu
* @date: 2019/11/15 14:59
**/
public class WorkRoulette {
/**
* hashedWheelTimer:工作轮盘
* ThreadFactory:创建work线程
* tickDuration:每个刻度的时间
* ticsPerWheel:轮盘一圈大小
* maxPendingTimeouts:最大等待处理超时
*/
private static final HashedWheelTimer hashedWheelTimer = new HashedWheelTimer(new ThreadFactory( ) {
@Override
public Thread newThread(Runnable r) {
return new Thread(r,"hashedWheelTimer"+r.hashCode());
}
},1, TimeUnit.SECONDS,8,true,0);
public static void addJob(){
IJobHandler testJob = JavaBeanInstanceCache.getJobHandler("testJob");
JobTask jobTask = new JobTask(testJob, "测试参数");
hashedWheelTimer.newTimeout(jobTask,10000000000L,TimeUnit.NANOSECONDS);
}
public static void main(String[] args) {
System.out.println(TimeUnit.SECONDS.toNanos(10));
}
}
package com.byit.task;
import com.byit.api.ExecutorServer;
import com.byit.job.handler.interfaces.IJobHandler;
import com.byit.job.model.ReturnResult;
import com.byit.rpc.remoting.invoker.annotation.RpcReference;
import io.netty.util.Timeout;
import io.netty.util.TimerTask;
/**
* @program: byit-myth-job->JavaTask
* @description: 任务工作线程
* @author: huangfu
* @date: 2019/11/14 17:09
**/
public class JobTask implements TimerTask {
@RpcReference
private ExecutorServer executorServer;
private IJobHandler iJobHandler;
private String param;
public JobTask(IJobHandler iJobHandler, String param) {
this.iJobHandler = iJobHandler;
this.param = param;
}
@Override
public void run(Timeout timeout) throws Exception {
ReturnResult<String> result = executorServer.execute(iJobHandler, param);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.4" level="project" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>byit-myth-core</artifactId>
<groupId>myth-job</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>myth-job</groupId>
<artifactId>myth-core-common</artifactId>
</project>
\ No newline at end of file
package com.byit.job.handler; package com.byit.job.handler;
import com.byit.job.handler.interfaces.IJobHandler; import com.byit.job.handler.interfaces.IJobHandler;
import com.byit.job.model.ReturnResult;
/** /**
* @program: byit-myth-job->AbsIJobHandler * @program: byit-myth-job->AbsIJobHandler
......
...@@ -8,6 +8,7 @@ import com.byit.job.model.ReturnResult; ...@@ -8,6 +8,7 @@ import com.byit.job.model.ReturnResult;
* @author: huangfu * @author: huangfu
* @date: 2019/11/13 15:31 * @date: 2019/11/13 15:31
**/ **/
public interface IJobHandler { public interface IJobHandler {
/** /**
* 所有的任务执行程序必须回调此方法执行 * 所有的任务执行程序必须回调此方法执行
......
...@@ -19,7 +19,7 @@ import java.io.Serializable; ...@@ -19,7 +19,7 @@ import java.io.Serializable;
public class ReturnResult<T> implements Serializable { public class ReturnResult<T> implements Serializable {
public static final long serialVersionUID = 1573630876693L; public static final long serialVersionUID = 1573630876693L;
public static final ReturnResult SUCCESS = new ReturnResult(null); public static final ReturnResult SUCCESS = new ReturnResult(null);
public static final ReturnResult FAIL = new ReturnResult(JobResultEnum.FAIL.getCode(),JobResultEnum.FAIL.getMsg()); public static final ReturnResult FAIL = new ReturnResult(JobResultEnum.FAIL.getCode(), JobResultEnum.FAIL.getMsg());
public static final ReturnResult FAIL_TIMEOUT = new ReturnResult(JobResultEnum.FAIL_TIMEOUT.getCode(),JobResultEnum.FAIL_TIMEOUT.getMsg()); public static final ReturnResult FAIL_TIMEOUT = new ReturnResult(JobResultEnum.FAIL_TIMEOUT.getCode(),JobResultEnum.FAIL_TIMEOUT.getMsg());
private int code; private int code;
private String msg; private String msg;
......
...@@ -13,4 +13,23 @@ ...@@ -13,4 +13,23 @@
<artifactId>myth-executor-core</artifactId> <artifactId>myth-executor-core</artifactId>
<dependencies>
<!-- spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>byit-myth-rpc</artifactId>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>myth-core-common</artifactId>
</dependency>
</dependencies>
</project> </project>
\ No newline at end of file
package com.byit.job.handler.annotation; package com.byit.job.annotation;
import java.lang.annotation.*; import java.lang.annotation.*;
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
<modules> <modules>
<module>myth-admin-core</module> <module>myth-admin-core</module>
<module>myth-executor-core</module> <module>myth-executor-core</module>
<module>myth-core-common</module>
</modules> </modules>
<dependencies> <dependencies>
......
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
<facet type="web" name="Web">
<configuration>
<webroots />
<sourceRoots>
<root url="file://$MODULE_DIR$/src/main/java" />
<root url="file://$MODULE_DIR$/src/main/resources" />
</sourceRoots>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:1.5.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:1.5.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:1.5.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:1.5.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:1.5.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.1.11" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.1.11" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.25" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:log4j-over-slf4j:1.7.25" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:4.3.24.RELEASE" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:1.5.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.37" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-annotations-api:8.5.37" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.37" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.37" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-validator:5.3.6.Final" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.4" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.10" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.10" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:4.3.24.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:4.3.24.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:4.3.24.RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework:spring-context:4.3.24.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:4.3.24.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.24.RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.4" level="project" />
<orderEntry type="module" module-name="myth-executor-core" />
<orderEntry type="module" module-name="byit-myth-rpc" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-all:4.1.41.Final" level="project" />
<orderEntry type="library" name="Maven: com.caucho:hessian:4.0.62" level="project" />
<orderEntry type="module" module-name="myth-register-client" />
<orderEntry type="module" module-name="myth-core-common" />
</component>
</module>
\ No newline at end of file
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>myth-job</groupId> <groupId>myth-job</groupId>
<artifactId>myth-executor-client</artifactId> <artifactId>myth-exector</artifactId>
</project> </project>
\ No newline at end of file
...@@ -28,6 +28,12 @@ ...@@ -28,6 +28,12 @@
<dependency> <dependency>
<groupId>myth-job</groupId> <groupId>myth-job</groupId>
<artifactId>myth-exector</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>byit-myth-rpc</artifactId> <artifactId>byit-myth-rpc</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
......
package com.byit.conf;
import com.byit.job.executor.SpringExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @program: byit-myth-job->ExcecutorConfig
* @description: TODO
* @author: huangfu
* @date: 2019/11/15 17:22
**/
@Configuration
public class ExcecutorConfig {
@Bean
public SpringExecutor springExecutor(){
return new SpringExecutor();
}
}
package com.byit.service;
import com.byit.job.annotation.JobHandler;
import com.byit.job.handler.BaseJobHandler;
import com.byit.job.handler.interfaces.IJobHandler;
import com.byit.job.model.ReturnResult;
import org.springframework.stereotype.Component;
/**
* @program: byit-myth-job->DemoHandel
* @description: huangfu
* @author: huangfu
* @date: 2019/11/15 17:52
**/
@JobHandler("addJob")
@Component
public class DemoHandel extends BaseJobHandler {
@Override
public ReturnResult<String> execute(String param) throws Exception {
System.out.println( "----------------"+param+"----------------------");
return ReturnResult.SUCCESS;
}
@Override
public void init(String param) {
}
@Override
public void destroy(String param) {
}
}
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
<packaging>pom</packaging> <packaging>pom</packaging>
<modules> <modules>
<module>myth-executor-api</module> <module>myth-executor-api</module>
<module>myth-executor-client</module>
<module>myth-executor-server</module> <module>myth-executor-server</module>
<module>myth-exector</module>
</modules> </modules>
......
...@@ -87,6 +87,49 @@ ...@@ -87,6 +87,49 @@
<version>${netty.version}</version> <version>${netty.version}</version>
</dependency> </dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>myth-executor-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>myth-core-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>byit-myth-rpc</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>myth-executor-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>myth-core-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>myth-job</groupId>
<artifactId>myth-admin-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment