美文网首页
Go语言基于Etcd实现的定时任务

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

作者: pyihe | 来源:发表于2020-09-18 22:11 被阅读0次

    介绍

    利用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
    源码链接

    相关文章

      网友评论

          本文标题:Go语言基于Etcd实现的定时任务

          本文链接:https://www.haomeiwen.com/subject/fpjsyktx.html