定時任務是軟件開發中很常見的一種處理業務的機制,xxl-job是近些年比較火的定時任務調用組件,其采用java 實現,是一個高可用,分布式調用的組件,還支持多種定時任務有關的特性,不僅能輕易的用java 客戶端接入,還提供了rest-api 供非java語言的客戶端接入。
1.xxl-job-executor-go 就是go實現了 xxl-job執行器相關協議
1.1用法
從xxl-job的git倉庫拉取xxl-job源碼
https://github.com/xuxueli/xxl-job/
從doc 下獲取初始的xxl-job數據庫的腳本,并執行
修改xxl-job-admin相關數據庫配置,如賬號密碼等,其他xxl-job-admin,也可以以docker啟動,官方提供了鏡像。
啟動完訪問xxl-job-admin控制臺,賬號密碼admin/123456
1.2 配置新的執行器
Appname:要求唯一,需要和客戶端的執行器配置保持一致,
注冊方式:可以選擇或手動,自動的話,客戶端啟動后會將本機執行器的地址注冊到xxl-job中(多網卡可能會存在一定問題,可以換成說手動),
1.3 xxl-job 調度中心集群啟動
xxl-job能啟動多個實例,只需要連接到同一個db,同時保證時針同步,在多個xxl-job-admin的實例上加一層反向代理,如使用nginx。
3.在go項目中引入xxl-job-executor-go
go get github.com/xxl-job/xxl-job-executor-go
func xxl_job() {exec := xxl.NewExecutor(xxl.ServerAddr("http://127.0.0.1:8080/xxl-job-admin"), // xxl-job控制臺地址xxl.AccessToken("default_token"), //請求令牌(默認為空)xxl.ExecutorIp("127.0.0.1"), //可自動獲取xxl.ExecutorPort("9999"), //默認9999(非必填)xxl.RegistryKey("golang-jobs"), //執行器名稱,和后臺新建的執行器的appName保持一致xxl.SetLogger(&logger{}), //自定義日志)exec.Init()exec.Use(customMiddleware)//設置日志查看handlerexec.LogHandler(customLogHandle)//注冊任務handlerexec.RegTask("task.test", task.Test) //regtask的第一個參數對應xxl-job-admin控制臺的任務的jobhandlerexec.RegTask("task.test2", task.Test2)exec.RegTask("task.panic", task.Panic)log.Fatal(exec.Run())
}// 自定義日志處理器
func customLogHandle(req *xxl.LogReq) *xxl.LogRes {return &xxl.LogRes{Code: xxl.SuccessCode, Msg: "", Content: xxl.LogResContent{FromLineNum: req.FromLineNum,ToLineNum: 2,LogContent: "這個是自定義日志handler",IsEnd: true,}}
}// xxl.Logger接口實現
type logger struct{}func (l *logger) Info(format string, a ...interface{}) {fmt.Println(fmt.Sprintf("自定義日志 - "+format, a...))
}func (l *logger) Error(format string, a ...interface{}) {log.Println(fmt.Sprintf("自定義日志 - "+format, a...))
}// 自定義中間件
func customMiddleware(tf xxl.TaskFunc) xxl.TaskFunc {return func(cxt context.Context, param *xxl.RunReq) string {log.Println("I am a middleware start")res := tf(cxt, param)log.Println("I am a middleware end")return res}
}```



可以在后臺查看調度結果
[http://www.xuxueli.com/xxl-job/](http://www.xuxueli.com/xxl-job/)