https://github.com/lufred/goworker
go实现的worker框架
https://github.com/lufred/goworker
distributed-systems golang microservice-framework worker worker-pool workflow workflow-engine
Last synced: 6 months ago
JSON representation
go实现的worker框架
- Host: GitHub
- URL: https://github.com/lufred/goworker
- Owner: LuFred
- License: mit
- Created: 2022-01-29T03:29:38.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-01-29T06:38:09.000Z (almost 4 years ago)
- Last Synced: 2025-07-01T20:03:26.659Z (6 months ago)
- Topics: distributed-systems, golang, microservice-framework, worker, worker-pool, workflow, workflow-engine
- Language: Go
- Homepage:
- Size: 51.8 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README



# worker
worker是一个后台常驻服务库,就像创建一个操作系统服务。
# 适用场景:
* 长时间后台处理任务
* mq数据消费服务
* 定时计划
* 异步任务处理
# 待支持
* 脚本任务(linux脚本)
* 失效转移(当某个实例在执行任务中宕机时,将重新由其它实例执行)
* 支持后台动态添加任务,支持Cron任务暂停,支持手动停止正在执行的任务(有条件)
* 任务依赖,多任务关联执行
* 监控
# 支持
* 服务集群,任务分片
* cron
* 出错重试
* 自定义重试策略
* 自定义logger配置
# [Example](/examples)
# Getting Started
1. 定义worker类
实现接口:Handler
```go
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
2. 开始使用
例子
```go
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))
}
```