Developer 433fb60f0a
All checks were successful
Build scheduler-backend image / build-and-push (push) Successful in 3m36s
Add scheduler backend image workflow
2026-05-28 13:15:30 +07:00
2026-05-28 13:29:24 +08:00
2026-05-28 13:29:24 +08:00
2026-05-28 00:16:19 +08:00
2026-05-28 13:29:24 +08:00
2026-05-28 00:16:19 +08:00
2026-05-28 13:29:24 +08:00
2026-05-28 13:29:24 +08:00
2026-05-28 13:29:24 +08:00
2026-05-28 13:29:24 +08:00
2026-05-28 00:16:19 +08:00
2026-05-28 13:29:24 +08:00
2026-05-28 00:16:19 +08:00
2026-05-28 00:16:19 +08:00
2026-05-28 13:29:24 +08:00
2026-05-28 00:16:19 +08:00
2026-05-28 00:16:19 +08:00
2026-05-28 00:16:19 +08:00
2026-05-28 00:16:19 +08:00

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

目录结构

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

外部进程环境变量优先级更高,不会被文件覆盖。

关键变量:

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=

启动方式

一条命令启动后端

cd /Users/vet/all/workspace414/scheduler-backend
./start.sh

这个脚本会同时启动:

  • api
  • worker

并把运行信息写到:

  • logs/api.log
  • logs/worker.log

PID 文件会写到:

  • run/api.pid
  • run/worker.pid

停止方式:

cd /Users/vet/all/workspace414/scheduler-backend
./stop.sh

启动 API

cd /Users/vet/all/workspace414/scheduler-backend
GOWORK=off go run ./cmd/api

或直接运行:

./scripts/start-api.sh

默认监听:

http://127.0.0.1:16811

启动 worker

cd /Users/vet/all/workspace414/scheduler-backend
GOWORK=off go run ./cmd/worker

或直接运行:

./scripts/start-worker.sh

worker 会:

  • 连接 Mongo
  • 暴露健康检查端口 http://127.0.0.1:16812/healthz
  • 加载启用任务
  • 跳过 manual
  • 注册 croninterval
  • 到点写执行记录并执行本地 Go handler

初始化示例任务

会向 scheduler_center.job_configs 写入一条示例任务:

  • name=sample-job
  • handlerKey=sample-handler
  • enabled=false
  • scheduleType=manual
  • defaultParams={"limit":10,"dryRun":true}

运行方式:

cd /Users/vet/all/workspace414/scheduler-backend
GOWORK=off go run ./cmd/tools/seed-sample-job

或直接运行:

./scripts/seed-sample-job.sh

测试与构建

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,例如 30s5m1h
  • 没有审批流
  • 没有分布式多 worker 协调
  • 执行记录详情页接口还没单独拆出
Description
No description provided
Readme 38 MiB
Languages
Go 90%
Shell 9.2%
Dockerfile 0.8%