分布式定时任务执行器


本文摘自网络,作者rushui,侵删。

xxl-job-executor-go

很多公司java与go开发共存,java中有xxl-job做为任务调度引擎,为此也出现了go执行器(客户端),使用起来比较简单:

支持

1.执行器注册
2.耗时任务取消
3.任务注册,像写http.Handler一样方便
4.任务panic处理
5.阻塞策略处理
6.任务完成支持返回执行备注
7.任务超时取消 (单位:秒,0为不限制)
8.失败重试次数(在参数param中,目前由任务自行处理)
9.可自定义日志
10.自定义日志查看handler
11.支持外部路由(可与gin集成)

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(""),            //请求令牌(默认为空)
        xxl.ExecutorIp("127.0.0.1"),    //可自动获取
        xxl.ExecutorPort("9999"),       //默认9999(非必填)
        xxl.RegistryKey("golang-jobs"), //执行器名称
        xxl.SetLogger(&logger{}),       //自定义日志
    )
    exec.Init()
    //设置日志查看handler
    exec.LogHandler(func(req *xxl.LogReq) *xxl.LogRes {
        return &xxl.LogRes{Code: 200, Msg: "", Content: xxl.LogResContent{
            FromLineNum: req.FromLineNum,
            ToLineNum:   2,
            LogContent:  "这个是自定义日志handler",
            IsEnd:       true,
        }}
    })
    //注册任务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接口实现
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...))
}

示例项目

github.com/xxl-job/xxl-job-executor-go/example/

与gin框架集成

https://github.com/gin-middleware/xxl-job-executor

xxl-job-admin配置

添加执行器

执行器管理->新增执行器,执行器列表如下:

AppName        名称        注册方式    OnLine         机器地址    操作
golang-jobs    golang执行器    自动注册    无

添加任务

任务管理->新增(注意,使用BEAN模式,JobHandler与RegTask名称一致)

1    测试panic    BEAN:task.panic    * 0 * * * ?    admin    STOP    
2    测试耗时任务    BEAN:task.test2    * * * * * ?    admin    STOP    
3    测试golang    BEAN:task.test        * * * * * ?    admin    STOP


相关阅读 >>

Golang中的map是指针吗

Golang找不到package怎么办

Go实战仿百度云盘 实现企业级分布式云存储系统

Go module 引入本地包的问题

Golang和Go语言有区别吗?

Golang channel是什么

手撸Golang Go与微服务 saga模式之4

Go语言类型转换

Golang websocket失败怎么办

gtpl Go语言html渲染

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...