go定时任务使用xxl-job?

📅 发布时间:2026/7/8 18:40:23 👁️ 浏览次数:
go定时任务使用xxl-job?
Go 语言完全可以接入 XXL-JOB而且有官方支持的 Go 执行器 SDK。以下是详细方案方案概述XXL-JOB 采用中心化调度 分布式执行架构调度中心AdminJava 开发负责任务管理、调度策略执行器ExecutorGo 应用通过 SDK 接入接收调度指令执行任务https://www.xuxueli.com/doc/static/xxl-job/xxl-job-executor-go/architecture.png1. 官方 Go 执行器 SDKGitHub:github.com/xxl-job/xxl-job-executor-go核心特性✅动态注册- 自动向 XXL-JOB Admin 注册执行器✅任务执行- 支持同步/异步任务执行✅分片广播- 支持分片任务、广播任务✅任务取消- 支持 Kill 信号处理✅中间件机制- 支持日志、监控、鉴权等切面✅自定义日志- 可在 Admin 查看 Go 执行日志✅Gin 集成- 可与现有 Web 服务共用端口2. 快速接入示例步骤 1安装依赖bash复制go get github.com/xxl-job/xxl-job-executor-go步骤 2编写执行器代码go复制package main import ( context fmt log xxl github.com/xxl-job/xxl-job-executor-go ) func main() { // 1. 初始化执行器 exec : xxl.NewExecutor( xxl.ServerAddr(http://localhost:8080/xxl-job-admin), // Admin 地址 xxl.AccessToken(default_token), // 接入令牌 xxl.ExecutorPort(9999), // 执行器端口 xxl.RegistryKey(go-executor-demo), // 执行器名称 xxl.SetLogger(customLogger{}), // 自定义日志 ) // 2. 初始化启动 HTTP 服务接收调度请求 exec.Init() // 3. 注册中间件可选日志、监控、鉴权 exec.Use(customMiddleware) // 4. 设置日志查看 Handler可选 exec.LogHandler(customLogHandle) // 5. 注册任务处理器 exec.RegTask(task.test, taskTest) // 普通任务 exec.RegTask(task.sharding, taskSharding) // 分片任务 // 6. 启动执行器 log.Fatal(exec.Run()) } // 任务实现 // 普通任务 func taskTest(ctx context.Context, param *xxl.RunReq) string { fmt.Printf(执行任务: %s, 参数: %s, 日志ID: %d\n, param.ExecutorHandler, param.ExecutorParams, param.LogID) // 模拟业务逻辑 select { case -ctx.Done(): return 任务被取消 // 支持 Kill 信号 case -time.After(2 * time.Second): return 执行成功 } } // 分片广播任务 func taskSharding(ctx context.Context, param *xxl.RunReq) string { // 分片参数当前分片序号、总分片数 shardIndex : param.BroadcastIndex shardTotal : param.BroadcastTotal fmt.Printf(分片任务: 当前分片 %d / 总分片 %d\n, shardIndex, shardTotal) // 业务逻辑根据分片处理对应数据 return fmt.Sprintf(分片 %d 执行完成, shardIndex) } // 中间件 日志 // 自定义中间件AOP 切面 func customMiddleware(tf xxl.TaskFunc) xxl.TaskFunc { return func(ctx context.Context, param *xxl.RunReq) string { log.Println(【中间件】任务开始:, param.ExecutorHandler) start : time.Now() res : tf(ctx, param) // 执行实际任务 log.Printf(【中间件】任务结束耗时: %v, 结果: %s, time.Since(start), res) return res } } // 自定义日志查看Admin 页面查看日志时调用 func customLogHandle(req *xxl.LogReq) *xxl.LogRes { // 实际应从日志文件/ES 查询 return xxl.LogRes{ Code: xxl.SuccessCode, Msg: , Content: xxl.LogResContent{ FromLineNum: req.FromLineNum, ToLineNum: 100, LogContent: 这里是自定义日志内容..., IsEnd: true, }, } } // 自定义 Logger 实现 type customLogger struct{} func (l *customLogger) Info(format string, a ...interface{}) { fmt.Printf([INFO] format\n, a...) } func (l *customLogger) Error(format string, a ...interface{}) { fmt.Printf([ERROR] format\n, a...) }3. 与 Gin 框架集成共用端口如果已有 Gin Web 服务可将 XXL-JOB 执行器作为中间件集成go复制package main import ( github.com/gin-gonic/gin xxl github.com/xxl-job/xxl-job-executor-go ) func main() { r : gin.Default() // 初始化 XXL-JOB 执行器 exec : xxl.NewExecutor( xxl.ServerAddr(http://xxl-job-admin:8080/xxl-job-admin), xxl.AccessToken(token), xxl.ExecutorPort(8080), // 与 Gin 共用端口 xxl.RegistryKey(gin-executor), ) exec.Init() exec.RegTask(api.job, handleJob) // 注册 XXL-JOB 中间件处理 /xxl-job/* 路径 r.Use(xxlMiddleware(exec)) // 业务路由 r.GET(/api/hello, func(c *gin.Context) { c.JSON(200, gin.H{msg: hello}) }) r.Run(:8080) } func xxlMiddleware(exec *xxl.Executor) gin.HandlerFunc { return func(c *gin.Context) { // 判断是否为 XXL-JOB 调度请求 if strings.HasPrefix(c.Request.URL.Path, /xxl-job/) { // 交由 XXL-JOB 执行器处理 exec.ServeHTTP(c.Writer, c.Request) c.Abort() return } c.Next() } }4. 阿里云 MSE XXL-JOB 托管版如果使用阿里云 MSE XXL-JOB托管服务Go 接入方式相同go复制exec : xxl.NewExecutor( xxl.ServerAddr(http://xxljob-xxxx.schedulerx.mse.aliyuncs.com), // 阿里云控制台获取 xxl.AccessToken(your-token), // 阿里云控制台获取 xxl.RegistryKey(your-app-name), xxl.ExecutorPort(9999), )5. 数据库表结构XXL-JOB Admin 自带Go 执行器无需关心表结构所有数据由 Java 版 Admin 管理。核心表包括表格复制表名说明xxl_job_info任务配置Cron、执行器、路由策略xxl_job_log任务执行日志调度时间、执行结果、日志xxl_job_registry执行器注册信息心跳维护xxl_job_group执行器分组管理xxl_job_user控制台用户权限Go 执行器作为无状态服务只通过 HTTP 接口与 Admin 交互不直接操作数据库。6. 对比Go 原生框架 vs XXL-JOB表格复制特性Go 原生框架如 gocronXXL-JOB Go 执行器架构单机/分布式需自建中心化调度成熟稳定管理界面需自建或没有开箱即用的 Web 控制台多语言Go onlyJava/Go/Python/Shell 统一调度运维成本低嵌入应用中需部署 Admin适用场景纯 Go 微服务内部调度异构系统统一调度中心选型建议已有 XXL-JOB 基础设施 →使用 Go 执行器接入纯 Go 生态、轻量级需求 →使用 gocron 或 go-pg-scheduler复杂工作流、Saga 事务 →使用 Temporal需要我提供Docker Compose 部署 XXL-JOB Admin Go 执行器的完整示例吗