[dev] add new module: OhMyAgent

This commit is contained in:
tjq 2020-05-20 10:54:46 +08:00
parent c5c7f7fd71
commit 4087c876e3
7 changed files with 236 additions and 23 deletions

View File

@ -1,5 +1,5 @@
# 基础镜像由于OhMyScheduler-Server的运行需要Maven和Git环境就自己打包了一个镜像 # 基础镜像
FROM tjqq/jdk-maven-git:8 FROM openjdk:8
# 维护者 # 维护者
MAINTAINER tengjiqi@gmail.com MAINTAINER tengjiqi@gmail.com
# 设置环境变量 # 设置环境变量
@ -15,5 +15,4 @@ RUN mkdir -p /root/oms-server
# 挂载数据卷,将文件直接输出到宿主机(注意,此处挂载的是匿名卷,即在宿主机位置随机) # 挂载数据卷,将文件直接输出到宿主机(注意,此处挂载的是匿名卷,即在宿主机位置随机)
VOLUME /root/oms-server VOLUME /root/oms-server
# 启动应用 # 启动应用
ENTRYPOINT ["sh","-c","java $PARAMS -jar /oms-server.jar"] ENTRYPOINT ["sh","-c","java -jar /oms-server.jar $PARAMS"]

View File

@ -0,0 +1,74 @@
<?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>oh-my-scheduler</artifactId>
<groupId>com.github.kfcfans</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>oh-my-scheduler-worker-agent</artifactId>
<version>1.2.0</version>
<packaging>jar</packaging>
<properties>
<oms.worker.version>1.2.0</oms.worker.version>
<logback.version>1.2.3</logback.version>
<picocli.version>4.3.2</picocli.version>
<spring.boot.version>2.2.6.RELEASE</spring.boot.version>
</properties>
<dependencies>
<dependency>
<groupId>com.github.kfcfans</groupId>
<artifactId>oh-my-scheduler-worker</artifactId>
<version>${oms.worker.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>
</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>com.github.kfcfans.oms.worker.MainApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,59 @@
package com.github.kfcfans.oms.worker;
import com.github.kfcfans.oms.worker.common.OhMyConfig;
import com.github.kfcfans.oms.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;
/**
* 启动类
*
* @author tjq
* @since 2020/5/20
*/
@Slf4j
@Command(name = "OhMyAgent", mixinStandardHelpOptions = true, version = "1.2.0", description = "OhMyScheduler-Worker代理")
public class MainApplication implements Runnable {
@Option(names = {"-a", "--app"}, description = "worker-agent名称可通过调度中心控制台创建", required = true)
private String appName;
@Option(names = {"-p", "--persistence"}, description = "存储策略枚举值DISK 或 MEMORY")
private String storeStrategy = "DISK";
@Option(names = {"-s", "--server"}, description = "调度中心地址,多值英文逗号分隔,格式 IP:Port OR domain")
private String server = "127.0.0.1:7700";
@Option(names = {"-l", "--length"}, description = "返回值最大长度")
private int length = 1024;
public static void main(String[] args) {
CommandLine commandLine = new CommandLine(new MainApplication());
commandLine.execute(args);
}
@Override
public void run() {
OhMyConfig cfg = new OhMyConfig();
try {
cfg.setAppName(appName);
cfg.setServerAddress(Splitter.on(",").splitToList(server));
cfg.setStoreStrategy(StoreStrategy.MEMORY.name().equals(storeStrategy) ? StoreStrategy.MEMORY : StoreStrategy.DISK);
cfg.setMaxResultLength(length);
OhMyWorker ohMyWorker = new OhMyWorker();
ohMyWorker.setConfig(cfg);
ohMyWorker.init();
}catch (Exception e) {
log.error("[OhMyAgent] startup failed by config: {}.", cfg, e);
ExceptionUtils.rethrow(e);
}
}
}

View File

@ -0,0 +1,68 @@
<?xml version="1.0"?>
<!-- 生产环境日志 -->
<configuration>
<!--
日志路径,注意权限问题,否则无法打印日志。
大坑记录:`~/logs`不会在用户目录下创建文件夹,而是在项目目录下创建名为~的文件夹
-->
<property name="LOG_PATH" value="${user.home}/oms/logs"/>
<property name="CONSOLE_LOG_PATTERN"
value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%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}/oms-server-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_PATH}/oms-agent-error.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>7</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %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>
<!-- 系统所有异常日志ERROR双写 end -->
<!-- 系统主日志 start -->
<appender name="DEFAULT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/oms-server-application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_PATH}/oms-agent-application.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>7</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<append>true</append>
</appender>
<!-- 系统主日志 日志 end -->
<root level="INFO">
<appender-ref ref="DEFAULT_APPENDER"/>
<appender-ref ref="ERROR_APPENDER"/>
<appender-ref ref="CONSOLE"/>
</root>
</configuration>

View File

@ -1,19 +0,0 @@
#!/bin/bash
# -p允许后面跟一个字符串作为提示 -r保证读入的是原始内容不会发生任何转义
read -r -p "请输入Dockedr镜像版本:" version
echo "即将构建的Docker镜像oms-server:$version"
read -r -p "任意键继续:"
# 一键部署脚本,请勿挪动脚本
cd `dirname $0`/../.. || exit
echo "================== 构建 jar =================="
mvn clean package -DskipTests -Pdev -U -e
echo "================== 拷贝 jar =================="
/bin/cp -rf oh-my-scheduler-server/target/*.jar others/oms-server.jar
ls -l others/oms-server.jar
echo "================== 构建应用镜像 =================="
docker build -t tjqq/oms-server:$version others/. || exit
echo "================== (关闭老应用)括号代表非必须,只是顺便运行下新版本进行测试 =================="
docker stop oms-server
echo "================== (删除老容器) =================="
docker container rm oms-server

View File

@ -0,0 +1,31 @@
#!/bin/bash
# -p允许后面跟一个字符串作为提示 -r保证读入的是原始内容不会发生任何转义
read -r -p "请输入Dockedr镜像版本:" version
echo "即将构建的Docker镜像oms-server:$version"
read -r -p "任意键继续:"
# 一键部署脚本,请勿挪动脚本
cd `dirname $0`/../.. || exit
echo "================== 构建 jar =================="
mvn clean package -DskipTests -Pdev -U -e
echo "================== 拷贝 jar =================="
/bin/cp -rf oh-my-scheduler-server/target/*.jar oh-my-scheduler-server/oms-server.jar
ls -l oh-my-scheduler-server/oms-server.jar
echo "================== 关闭老应用 =================="
docker stop oms-server
echo "================== 删除老容器 =================="
docker container rm oms-server
echo "================== 删除旧镜像 =================="
docker rmi -f tjqq/oms-server:$version
echo "================== 构建应用镜像 =================="
docker build -t tjqq/oms-server:$version oh-my-scheduler-server/. || exit
echo "================== 准备启动应用 =================="
# 启动应用(端口映射、数据路径挂载)
## -d后台运行
## -p指定端口映射容器端口宿主机端口
## --name指定容器名称
## -v--volume挂载目录宿主机目录docker内目录写入docker内路径的数据会被直接写到宿主机上常用于日志文件
## -net=host容器和宿主机共享网络容器直接使用宿主机IP性能最好但网络隔离较差
docker run -d -e PARAMS="--spring.profiles.active=product" -p 7700:7700 -p 10086:10086 -p 27777:27777 --name oms-server -v ~/docker/oms-server:/root/oms-server tjqq/oms-server:$version
sleep 1
tail --pid=$$ -f -n 1000 ~/docker/oms-server/application.log

View File

@ -40,6 +40,7 @@
<module>oh-my-scheduler-common</module> <module>oh-my-scheduler-common</module>
<module>oh-my-scheduler-client</module> <module>oh-my-scheduler-client</module>
<module>oh-my-scheduler-worker-samples</module> <module>oh-my-scheduler-worker-samples</module>
<module>oh-my-scheduler-worker-agent</module>
</modules> </modules>
<properties> <properties>