定时任务是软件开发中很常见的一种处理业务的机制,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)
//设置日志查看handler
exec.LogHandler(customLogHandle)
//注册任务handler
exec.RegTask("task.test", task.Test) //regtask的第一个参数对应xxl-job-admin控制台的任务的jobhandler
exec.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
}
}```
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c4908e06b3d648fc9d2cbe595b78f4d0.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d310fae029b4477488718cbd5a3ae575.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8e29b176aafe4116901f8c7050830b53.png)
可以在后台查看调度结果
[http://www.xuxueli.com/xxl-job/](http://www.xuxueli.com/xxl-job/)