---初始化项目
This commit is contained in:
26
powerjob-worker-agent/Dockerfile
Normal file
26
powerjob-worker-agent/Dockerfile
Normal file
@ -0,0 +1,26 @@
|
||||
# 为了便于使用 arthas,agent 也使用 jdk 而不是 jre
|
||||
FROM adoptopenjdk:8-jdk-hotspot
|
||||
MAINTAINER tengjiqi@gmail.com
|
||||
|
||||
ENV APP_NAME=powerjob-worker-agent
|
||||
# 传递 SpringBoot 启动参数 和 JVM参数
|
||||
ENV PARAMS=""
|
||||
ENV JVMOPTIONS=""
|
||||
|
||||
# 默认安装 python2.7
|
||||
RUN apt-get update && \
|
||||
apt-get install -y python \
|
||||
&& apt-get clean \
|
||||
&& apt-get autoclean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# 安装 wait-for-it 脚本
|
||||
RUN curl -o wait-for-it.sh https://gitee.com/KFCFans/wait-for-it/raw/master/wait-for-it.sh
|
||||
RUN chmod +x wait-for-it.sh
|
||||
# 拷贝主文件
|
||||
COPY powerjob-agent.jar /powerjob-agent.jar
|
||||
# 暴露端口(AKKA-Client)
|
||||
EXPOSE 27777
|
||||
# 挂载数据卷,将文件直接输出到宿主机(注意,此处挂载的是匿名卷,即在宿主机位置随机)
|
||||
VOLUME /root
|
||||
# 启动应用
|
||||
ENTRYPOINT ["sh","-c","java $JVMOPTIONS -jar /powerjob-agent.jar $PARAMS"]
|
||||
134
powerjob-worker-agent/pom.xml
Normal file
134
powerjob-worker-agent/pom.xml
Normal file
@ -0,0 +1,134 @@
|
||||
<?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>powerjob</artifactId>
|
||||
<groupId>tech.powerjob</groupId>
|
||||
<version>5.1.2</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>powerjob-worker-agent</artifactId>
|
||||
<name>powerjob-worker-agent</name>
|
||||
<version>5.1.2</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
|
||||
<properties>
|
||||
<powerjob.worker.version>5.1.2</powerjob.worker.version>
|
||||
<logback.version>1.2.13</logback.version>
|
||||
<picocli.version>4.3.2</picocli.version>
|
||||
<spring.version>5.3.31</spring.version>
|
||||
|
||||
<spring.boot.version>2.3.4.RELEASE</spring.boot.version>
|
||||
|
||||
<powerjob.official.processors.version>5.1.2</powerjob.official.processors.version>
|
||||
|
||||
<!-- dependency for dynamic sql processor -->
|
||||
<mysql.version>8.0.28</mysql.version>
|
||||
<ojdbc.version>19.7.0.0</ojdbc.version>
|
||||
<mssql-jdbc.version>7.4.1.jre8</mssql-jdbc.version>
|
||||
<db2-jdbc.version>11.5.0.0</db2-jdbc.version>
|
||||
<postgresql.version>42.2.14</postgresql.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>tech.powerjob</groupId>
|
||||
<artifactId>powerjob-worker</artifactId>
|
||||
<version>${powerjob.worker.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>tech.powerjob</groupId>
|
||||
<artifactId>powerjob-official-processors</artifactId>
|
||||
<version>${powerjob.official.processors.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- java cli 工具 -->
|
||||
<dependency>
|
||||
<groupId>info.picocli</groupId>
|
||||
<artifactId>picocli</artifactId>
|
||||
<version>${picocli.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-core</artifactId>
|
||||
<version>${logback.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
<version>${logback.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- mysql -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>${mysql.version}</version>
|
||||
</dependency>
|
||||
<!-- oracle -->
|
||||
<dependency>
|
||||
<groupId>com.oracle.database.jdbc</groupId>
|
||||
<artifactId>ojdbc8</artifactId>
|
||||
<version>${ojdbc.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.oracle.database.nls</groupId>
|
||||
<artifactId>orai18n</artifactId>
|
||||
<version>${ojdbc.version}</version>
|
||||
</dependency>
|
||||
<!-- sqlserver -->
|
||||
<dependency>
|
||||
<groupId>com.microsoft.sqlserver</groupId>
|
||||
<artifactId>mssql-jdbc</artifactId>
|
||||
<version>${mssql-jdbc.version}</version>
|
||||
</dependency>
|
||||
<!-- db2 -->
|
||||
<dependency>
|
||||
<groupId>com.ibm.db2</groupId>
|
||||
<artifactId>jcc</artifactId>
|
||||
<version>${db2-jdbc.version}</version>
|
||||
</dependency>
|
||||
<!-- postgresql -->
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
<version>${postgresql.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- worker 移除了 Spring 强依赖,agent 需要使用容器功能必须直接依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
<!-- 谁说SpringBoot的打包插件只能给SpringBoot用的?省的我写一堆配置还有BUG... -->
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<version>${spring.boot.version}</version>
|
||||
<configuration>
|
||||
<mainClass>tech.powerjob.agent.MainApplication</mainClass>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,77 @@
|
||||
package tech.powerjob.agent;
|
||||
|
||||
import tech.powerjob.common.RemoteConstant;
|
||||
import tech.powerjob.common.enums.Protocol;
|
||||
import tech.powerjob.worker.PowerJobWorker;
|
||||
import tech.powerjob.worker.common.PowerJobWorkerConfig;
|
||||
import tech.powerjob.worker.common.constants.StoreStrategy;
|
||||
import com.google.common.base.Splitter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||
import picocli.CommandLine;
|
||||
import picocli.CommandLine.Command;
|
||||
import picocli.CommandLine.Option;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* powerjob-worker-agent entry
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2020/5/20
|
||||
*/
|
||||
@Slf4j
|
||||
@Command(name = "PowerJobAgent", mixinStandardHelpOptions = true, version = "4.3.0", description = "powerjob-worker agent")
|
||||
public class MainApplication implements Runnable {
|
||||
|
||||
@Option(names = {"-a", "--app"}, description = "worker-agent's name", required = true)
|
||||
private String appName;
|
||||
|
||||
@Option(names = {"-p", "--port"}, description = "transporter working port, not recommended to change")
|
||||
private Integer port = RemoteConstant.DEFAULT_WORKER_PORT;
|
||||
|
||||
@Option(names = {"-o", "--protocol"}, description = "transporter protocol, AKKA or HTTP")
|
||||
private String protocol = Protocol.AKKA.name();
|
||||
|
||||
@Option(names = {"-e", "--persistence"}, description = "storage strategy, DISK or MEMORY")
|
||||
private String storeStrategy = "DISK";
|
||||
|
||||
@Option(names = {"-s", "--server"}, description = "oms-server's address, IP:Port OR domain", required = true)
|
||||
private String server = "localhost:7700";
|
||||
|
||||
@Option(names = {"-l", "--length"}, description = "ProcessResult#msg max length")
|
||||
private int length = 1024;
|
||||
|
||||
@Option(names = {"-t", "--tag"}, description = "worker-agent's tag")
|
||||
private String tag;
|
||||
|
||||
public static void main(String[] args) {
|
||||
CommandLine commandLine = new CommandLine(new MainApplication());
|
||||
commandLine.execute(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
PowerJobWorkerConfig cfg = new PowerJobWorkerConfig();
|
||||
try {
|
||||
|
||||
cfg.setAppName(appName);
|
||||
cfg.setPort(port);
|
||||
List<String> servers = new ArrayList<>(Splitter.on(",").splitToList(server));
|
||||
cfg.setServerAddress(servers);
|
||||
cfg.setStoreStrategy(StoreStrategy.MEMORY.name().equals(storeStrategy) ? StoreStrategy.MEMORY : StoreStrategy.DISK);
|
||||
cfg.setMaxResultLength(length);
|
||||
cfg.setTag(tag);
|
||||
cfg.setProtocol(Protocol.of(protocol));
|
||||
|
||||
PowerJobWorker worker = new PowerJobWorker(cfg);
|
||||
|
||||
worker.init();
|
||||
}catch (Exception e) {
|
||||
log.error("[PowerJobAgent] startup failed by config: {}.", cfg, e);
|
||||
ExceptionUtils.rethrow(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
80
powerjob-worker-agent/src/main/resources/logback.xml
Normal file
80
powerjob-worker-agent/src/main/resources/logback.xml
Normal file
@ -0,0 +1,80 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- 生产环境日志 -->
|
||||
<configuration>
|
||||
|
||||
<!--
|
||||
日志路径,注意权限问题,否则无法打印日志。
|
||||
大坑记录:`~/logs`不会在用户目录下创建文件夹,而是在项目目录下创建名为~的文件夹
|
||||
-->
|
||||
<property name="LOG_PATH" value="${user.home}/powerjob/worker/agent_logs"/>
|
||||
|
||||
<property name="CONSOLE_LOG_PATTERN"
|
||||
value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%green(%logger{10}) |%cyan(%msg%n)"/>
|
||||
|
||||
<!-- Console 输出设置 -->
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
|
||||
<charset>utf8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>debug</level>
|
||||
<onMatch>DENY</onMatch>
|
||||
<onMismatch>NEUTRAL</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 系统所有异常日志(ERROR)双写 start -->
|
||||
<appender name="ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${LOG_PATH}/powerjob-agent-error.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<FileNamePattern>${LOG_PATH}/powerjob-agent-error.%d{yyyy-MM-dd}.log</FileNamePattern>
|
||||
<MaxHistory>3</MaxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{10} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>ERROR</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender name="ASYNC_ERROR_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
|
||||
<queueSize>256</queueSize>
|
||||
<discardingThreshold>0</discardingThreshold>
|
||||
<neverBlock>true</neverBlock>
|
||||
<appender-ref ref="ERROR_APPENDER"/>
|
||||
</appender>
|
||||
<!-- 系统所有异常日志(ERROR)双写 end -->
|
||||
|
||||
|
||||
<!-- 系统主日志 start -->
|
||||
<appender name="DEFAULT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${LOG_PATH}/powerjob-agent-application.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<FileNamePattern>${LOG_PATH}/powerjob-agent-application.%d{yyyy-MM-dd}.log</FileNamePattern>
|
||||
<MaxHistory>3</MaxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{10} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
<append>true</append>
|
||||
</appender>
|
||||
<appender name="ASYNC_DEFAULT_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
|
||||
<queueSize>256</queueSize>
|
||||
<discardingThreshold>0</discardingThreshold>
|
||||
<neverBlock>true</neverBlock>
|
||||
<appender-ref ref="DEFAULT_APPENDER"/>
|
||||
</appender>
|
||||
<!-- 系统主日志 日志 end -->
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
<appender-ref ref="ASYNC_ERROR_APPENDER"/>
|
||||
<appender-ref ref="ASYNC_DEFAULT_APPENDER"/>
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user