介紹
利用Etcd的Lease租約特性來實現(xiàn)定時功能覆旭,同時通過Watch機制來實現(xiàn)多節(jié)點情況下只有一個節(jié)點執(zhí)行該任務(wù)。通過定時任務(wù)庫Cron的時間字符串解析器Parser來解析任務(wù)執(zhí)行時間岖妄。
功能列表
API | Comment |
---|---|
RegisterHandler | 注冊任務(wù)Key的Handler(每個key只能注冊一次) |
RegisterHandlerWithCover | 注冊任務(wù)Key的Handler(可以覆蓋之前注冊的Handler) |
Add | 添加任務(wù) |
AddWithCover | 添加任務(wù)(可覆蓋) |
UpdateTime | 更新任務(wù)執(zhí)行時間 |
Remove | 移除任務(wù) |
使用
package main
import (
"fmt"
"github.com/coreos/etcd/clientv3"
go_task "github.com/pyihe/go-task"
"time"
)
func main() {
config := clientv3.Config{
Endpoints: []string{"127.0.0.1:2379"},
DialTimeout: 5 * time.Second,
}
c, err := clientv3.New(config)
if err != nil {
fmt.Printf("new err: %v\n", err)
return
}
defer c.Close()
tsker := go_task.NewTasker(c, "task", 10)
if err = tsker.RegisterHandler("key1", handler); err != nil {
//handle(err)
}
if err = tsker.Add("key1", "value1", "@every 1m", go_task.TaskTypeOnceCall); err != nil {
//handle(err)
}
if err = tsker.UpdateTime("key1", "value1", "@every 10m"); err != nil {
//handle(err)
}
//remove the task with specified key and value
if err = tsker.Remove("key1", "value1"); err != nil {
//handle(err)
}
}
func handler(key, value string) {
//handle with key and value
}