174 lines
3.2 KiB
Markdown
174 lines
3.2 KiB
Markdown
# 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
|
|
REDIS_ADDR=127.0.0.1:6379
|
|
REDIS_USERNAME=
|
|
REDIS_PASSWORD=
|
|
```
|
|
|
|
## 启动方式
|
|
|
|
### 一条命令启动后端
|
|
|
|
```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 协调
|
|
- 执行记录详情页接口还没单独拆出
|