Golang + 任务调度(xxl-job-executor-go)+ 搭配定时cron

前言

XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

Golang + 任务调度(xxl-job-executor-go)+ 搭配定时cron_第1张图片


提示:以下是本篇文章正文内容,下面案例可供参考

一、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集成)

二、xxl-job-admin配置

2.1 、添加执行器

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

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

2.2、添加任务

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

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

三、代码示例

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...))
}

引用 https://github.com/xxl-job/xxl-job-executor-go 

与gin框架集成  https://github.com/gin-middleware/xxl-job-executor


四、cron是什么?

cron v3是对该库的主要升级,可解决所有未解决的错误,功能请求和不完善的问题。它基于master的合并,而master包含对多年来发现的问题的各种修复,而v2分支则包含一些向后不兼容的功能,例如删除cron作业的功能。此外,v3增加了对Go模块的支持,清理了诸如时区支持之类的粗糙边缘,并修复了许多错误。

新的功能:

  • 支持Go模块。调用者现在必须将此库导入为 github.com/robfig/cron/v3,而不是gopkg.in/...

 GIT:https://github.com/robfig/cron

五、代码示例

package main

import (
	"fmt"
	"github.com/robfig/cron/v3"
	"time"
)

func main() {
	// 新建一个定时任务对象
	// 根据cron表达式进行时间调度,cron可以精确到秒,大部分表达式格式也是从秒开始。
	//crontab := cron.New()  默认从分开始进行时间调度
	crontab := cron.New(cron.WithSeconds()) //精确到秒
	//定义定时器调用的任务函数
	task := func() {
		fmt.Println("hello world", time.Now())
	}
	//定时任务
	spec := "*/5 * * * * ?" //cron表达式,每五秒一次
	// 添加定时任务,
	crontab.AddFunc(spec, task)
	// 启动定时器
	crontab.Start()
	// 定时任务是另起协程执行的,这里使用 select 简答阻塞.实际开发中需要
	// 根据实际情况进行控制
	select {} //阻塞主线程停止
}
------------------------------------------输出结果----------------------------------
hello world 2020-03-18 11:13:00.0241639 +0800 CST m=+3.113746301
hello world 2020-03-18 11:13:05.0007375 +0800 CST m=+8.090319901
hello world 2020-03-18 11:13:10.0004232 +0800 CST m=+13.090005601
hello world 2020-03-18 11:13:15.0003857 +0800 CST m=+18.089968101
hello world 2020-03-18 11:13:20.0003788 +0800 CST m=+23.089961201

引用:https://blog.csdn.net/qq_37493556/article/details/105083396 

你可能感兴趣的:(Golang,go)