init
This commit is contained in:
170
README.md
Normal file
170
README.md
Normal file
@@ -0,0 +1,170 @@
|
||||
# scheduler-backend
|
||||
|
||||
独立的调度中心后端工程,负责:
|
||||
|
||||
- 管理 API
|
||||
- 本地 Go handler 注册
|
||||
- 手动执行
|
||||
- `gocron` 定时执行
|
||||
- MongoDB 中的任务配置与执行记录存储
|
||||
|
||||
## 当前能力
|
||||
|
||||
- `GET /admin/scheduler/handlers`
|
||||
- `GET /admin/scheduler/jobs`
|
||||
- `GET /admin/scheduler/jobs/:id`
|
||||
- `POST /admin/scheduler/jobs`
|
||||
- `PUT /admin/scheduler/jobs/:id`
|
||||
- `POST /admin/scheduler/jobs/:id/toggle`
|
||||
- `POST /admin/scheduler/jobs/:id/run`
|
||||
- `GET /admin/scheduler/executions`
|
||||
|
||||
## 目录结构
|
||||
|
||||
```text
|
||||
cmd/api 管理 API 入口
|
||||
cmd/worker 调度执行入口
|
||||
internal/api Gin 路由
|
||||
internal/executor 本地 handler 执行
|
||||
internal/jobdef handler 定义与注册
|
||||
internal/scheduler gocron 调度服务
|
||||
internal/store/model Mongo 文档模型
|
||||
internal/store/mongo Mongo 连接与存储实现
|
||||
pkg/config 环境配置加载
|
||||
pkg/log 日志封装
|
||||
```
|
||||
|
||||
## 环境变量
|
||||
|
||||
默认会按下面顺序读取:
|
||||
|
||||
1. `.env`
|
||||
2. `.env.<APP_ENV|GO_ENV|ENV>`
|
||||
3. `.env.local`
|
||||
|
||||
外部进程环境变量优先级更高,不会被文件覆盖。
|
||||
|
||||
关键变量:
|
||||
|
||||
```env
|
||||
HTTP_PORT=16811
|
||||
WORKER_HTTP_PORT=16812
|
||||
MONGO_HOST=47.237.103.4
|
||||
MONGO_PORT=27017
|
||||
MONGO_USERNAME=
|
||||
MONGO_PASSWORD=
|
||||
MONGO_AUTHSOURCE=admin
|
||||
MONGO_DATABASE=openim_v3
|
||||
SCHEDULER_MONGO_DATABASE=scheduler_center
|
||||
```
|
||||
|
||||
## 启动方式
|
||||
|
||||
### 一条命令启动后端
|
||||
|
||||
```bash
|
||||
cd /Users/vet/all/workspace414/scheduler-backend
|
||||
./start.sh
|
||||
```
|
||||
|
||||
这个脚本会同时启动:
|
||||
|
||||
- `api`
|
||||
- `worker`
|
||||
|
||||
并把运行信息写到:
|
||||
|
||||
- `logs/api.log`
|
||||
- `logs/worker.log`
|
||||
|
||||
PID 文件会写到:
|
||||
|
||||
- `run/api.pid`
|
||||
- `run/worker.pid`
|
||||
|
||||
停止方式:
|
||||
|
||||
```bash
|
||||
cd /Users/vet/all/workspace414/scheduler-backend
|
||||
./stop.sh
|
||||
```
|
||||
|
||||
### 启动 API
|
||||
|
||||
```bash
|
||||
cd /Users/vet/all/workspace414/scheduler-backend
|
||||
GOWORK=off go run ./cmd/api
|
||||
```
|
||||
|
||||
或直接运行:
|
||||
|
||||
```bash
|
||||
./scripts/start-api.sh
|
||||
```
|
||||
|
||||
默认监听:
|
||||
|
||||
```text
|
||||
http://127.0.0.1:16811
|
||||
```
|
||||
|
||||
### 启动 worker
|
||||
|
||||
```bash
|
||||
cd /Users/vet/all/workspace414/scheduler-backend
|
||||
GOWORK=off go run ./cmd/worker
|
||||
```
|
||||
|
||||
或直接运行:
|
||||
|
||||
```bash
|
||||
./scripts/start-worker.sh
|
||||
```
|
||||
|
||||
worker 会:
|
||||
|
||||
- 连接 Mongo
|
||||
- 暴露健康检查端口 `http://127.0.0.1:16812/healthz`
|
||||
- 加载启用任务
|
||||
- 跳过 `manual`
|
||||
- 注册 `cron` 和 `interval`
|
||||
- 到点写执行记录并执行本地 Go handler
|
||||
|
||||
## 初始化示例任务
|
||||
|
||||
会向 `scheduler_center.job_configs` 写入一条示例任务:
|
||||
|
||||
- `name=sample-job`
|
||||
- `handlerKey=sample-handler`
|
||||
- `enabled=false`
|
||||
- `scheduleType=manual`
|
||||
- `defaultParams={"limit":10,"dryRun":true}`
|
||||
|
||||
运行方式:
|
||||
|
||||
```bash
|
||||
cd /Users/vet/all/workspace414/scheduler-backend
|
||||
GOWORK=off go run ./cmd/tools/seed-sample-job
|
||||
```
|
||||
|
||||
或直接运行:
|
||||
|
||||
```bash
|
||||
./scripts/seed-sample-job.sh
|
||||
```
|
||||
|
||||
## 测试与构建
|
||||
|
||||
```bash
|
||||
cd /Users/vet/all/workspace414/scheduler-backend
|
||||
GOWORK=off go test ./pkg/config ./internal/jobdef ./internal/store/model ./internal/executor -v
|
||||
GOWORK=off go build ./cmd/api ./cmd/worker ./cmd/tools/seed-sample-job
|
||||
```
|
||||
|
||||
## 当前限制
|
||||
|
||||
- 只支持本地 Go handler
|
||||
- `interval` 依赖 `time.ParseDuration`,例如 `30s`、`5m`、`1h`
|
||||
- 没有审批流
|
||||
- 没有分布式多 worker 协调
|
||||
- 执行记录详情页接口还没单独拆出
|
||||
Reference in New Issue
Block a user