Go语言基于Etcd实现的定时任务

2020-09-18  本文已影响0人  pyihe

介绍

利用Etcd的Lease租约特性来实现定时功能,同时通过Watch机制来实现多节点情况下只有一个节点执行该任务。通过定时任务库Cron的时间字符串解析器Parser来解析任务执行时间。

功能列表

API Comment
RegisterHandler 注册任务Key的Handler(每个key只能注册一次)
RegisterHandlerWithCover 注册任务Key的Handler(可以覆盖之前注册的Handler)
Add 添加任务
AddWithCover 添加任务(可覆盖)
UpdateTime 更新任务执行时间
Remove 移除任务

使用

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
}

参考

Etcd
Cron
源码链接

上一篇下一篇

猜你喜欢

热点阅读