worker是一个后台常驻服务库,就像创建一个操作系统服务。
- 长时间后台处理任务
- mq数据消费服务
- 定时计划
- 异步任务处理
- 脚本任务(linux脚本)
- 失效转移(当某个实例在执行任务中宕机时,将重新由其它实例执行)
- 支持后台动态添加任务,支持Cron任务暂停,支持手动停止正在执行的任务(有条件)
- 任务依赖,多任务关联执行
- 监控
- 服务集群,任务分片
- cron
- 出错重试
- 自定义重试策略
- 自定义logger配置
- 定义worker类 实现接口:Handler
type Handler interface {
Before(ctx context.Context) error
Do(ctx context.Context) error
After(ctx context.Context) error
ErrorMessage(ctx context.Context, err error)
}
执行顺序:
Before -> Do -> After
ErrorMessage贯穿handler的执行全周期,负责接收执行期间出现的error
- 开始使用 例子
package main
import (
"context"
"fmt"
"github.com/lufred/goworker"
"github.com/lufred/goworker/config"
)
func main() {
w := goworker.NewWorker(
context.Background(),
config.DefaultWorkerConfig(),
&MyWorker{})
if err := w.Run(); err != nil {
fmt.Println(err)
return
}
if err := w.Wait(); err != nil {
fmt.Println(err.Error())
}
}
type MyWorker struct {
}
func (w *MyWorker) Before(ctx context.Context) error {
fmt.Println("任务初始化")
return nil
}
func (w *MyWorker) Do(ctx context.Context) error {
fmt.Println("任务执行中:helloWorld")
return nil
}
func (w *MyWorker) After(ctx context.Context) error {
fmt.Println("任务处理完成")
return nil
}
func (w *MyWorker) ErrorMessage(ctx context.Context, err error) {
fmt.Println(fmt.Sprintf("err:%+v", err))
}