xxl-job-executor-go
很多公司java與go開發(fā)共存啊犬,java中有xxl-job做為任務(wù)調(diào)度引擎愕够,為此也出現(xiàn)了go執(zhí)行器(客戶端)果漾,使用起來比較簡單:
支持
1.執(zhí)行器注冊
2.耗時(shí)任務(wù)取消
3.任務(wù)注冊壳猜,像寫http.Handler一樣方便
4.任務(wù)panic處理
5.阻塞策略處理
6.任務(wù)完成支持返回執(zhí)行備注
7.任務(wù)超時(shí)取消 (單位:秒枚赡,0為不限制)
8.失敗重試次數(shù)(在參數(shù)param中氓癌,目前由任務(wù)自行處理)
9.可自定義日志
10.自定義日志查看handler
11.支持外部路由(可與gin集成)
項(xiàng)目地址
https://github.com/xxl-job/xxl-job-executor-go
Example
package main
import (
"fmt"
xxl "github.com/xxl-job/xxl-job-executor-go"
"github.com/xxl-job/xxl-job-executor-go/example/task"
"log"
)
func main() {
exec := xxl.NewExecutor(
xxl.ServerAddr("http://127.0.0.1/xxl-job-admin"),
xxl.AccessToken(""), //請求令牌(默認(rèn)為空)
xxl.ExecutorIp("127.0.0.1"), //可自動(dòng)獲取
xxl.ExecutorPort("9999"), //默認(rèn)9999(非必填)
xxl.RegistryKey("golang-jobs"), //執(zhí)行器名稱
xxl.SetLogger(&logger{}), //自定義日志
)
exec.Init()
//設(shè)置日志查看handler
exec.LogHandler(func(req *xxl.LogReq) *xxl.LogRes {
return &xxl.LogRes{Code: 200, Msg: "", Content: xxl.LogResContent{
FromLineNum: req.FromLineNum,
ToLineNum: 2,
LogContent: "這個(gè)是自定義日志handler",
IsEnd: true,
}}
})
//注冊任務(wù)handler
exec.RegTask("task.test", task.Test)
exec.RegTask("task.test2", task.Test2)
exec.RegTask("task.panic", task.Panic)
log.Fatal(exec.Run())
}
//xxl.Logger接口實(shí)現(xiàn)
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...))
}
示例項(xiàng)目
github.com/xxl-job/xxl-job-executor-go/example/
與gin框架集成
https://github.com/gin-middleware/xxl-job-executor
xxl-job-admin配置
添加執(zhí)行器
執(zhí)行器管理->新增執(zhí)行器,執(zhí)行器列表如下:
AppName 名稱 注冊方式 OnLine 機(jī)器地址 操作
golang-jobs golang執(zhí)行器 自動(dòng)注冊 無
添加任務(wù)
任務(wù)管理->新增(注意,使用BEAN模式贫橙,JobHandler與RegTask名稱一致)
1 測試panic BEAN:task.panic * 0 * * * ? admin STOP
2 測試耗時(shí)任務(wù) BEAN:task.test2 * * * * * ? admin STOP
3 測試golang BEAN:task.test * * * * * ? admin STOP