golang任务调度交互插件库go-chronos的使用

golang任务调度交互插件库go-chronos的使用

Build Status Go Report Card Taylor Swift Volkswagen License

go-chronos是一个用于Chronos REST API的Go语言库。可以通过它来访问Chronos API。

主要功能

  • 创建任务
  • 删除任务
  • 搜索任务
  • 终止任务
  • 列出任务
  • 标记任务为成功

安装

go get github.com/axelspringer/go-chronos

使用示例

下面是一个使用go-chronos创建和列出任务的完整示例:

package main

import (
	"fmt"
	"log"

	"github.com/axelspringer/go-chronos/chronos"
)

func main() {
	// 创建Chronos客户端
	config := chronos.NewDefaultConfig()
	config.ChronosURL = "http://your-chronos-server:4400" // 替换为你的Chronos服务器地址
	client := chronos.NewClient(config)

	// 创建一个新任务
	job := &chronos.Job{
		Name:        "test-job",
		Command:     "echo 'Hello World'",
		Schedule:    "R/2015-05-21T19:32:00Z/PT2M", // 每2分钟运行一次
		Owner:       "your-email@example.com",
		Async:       false,
		Disabled:    false,
	}

	// 添加任务
	_, err := client.AddJob(job)
	if err != nil {
		log.Fatalf("Failed to add job: %v", err)
	}

	// 列出所有任务
	jobs, err := client.ListJobs()
	if err != nil {
		log.Fatalf("Failed to list jobs: %v", err)
	}

	fmt.Println("Current jobs:")
	for _, j := range jobs {
		fmt.Printf("- %s (Schedule: %s)\n", j.Name, j.Schedule)
	}

	// 删除任务
	_, err = client.DeleteJob(job.Name)
	if err != nil {
		log.Fatalf("Failed to delete job: %v", err)
	}
}

开发

安装依赖工具和包:

make deps && make restore

许可证

Apache 2.0


更多关于golang任务调度交互插件库go-chronos的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang任务调度交互插件库go-chronos的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Go-Chronos 任务调度交互插件库使用指南

Go-Chronos 是一个轻量级的 Golang 任务调度库,提供了简单易用的 API 来管理定时任务。下面我将详细介绍如何使用这个库。

安装

首先安装 go-chronos 库:

go get github.com/yourusername/go-chronos

基本使用

1. 创建调度器

package main

import (
	"fmt"
	"time"
	
	"github.com/yourusername/go-chronos/chronos"
)

func main() {
	// 创建新的调度器实例
	scheduler := chronos.NewScheduler()
	
	// 确保在程序退出前停止所有任务
	defer scheduler.Stop()
}

2. 添加定时任务

// 定义一个简单的任务
func myTask() {
	fmt.Println("任务执行于:", time.Now().Format("2006-01-02 15:04:05"))
}

func main() {
	scheduler := chronos.NewScheduler()
	defer scheduler.Stop()

	// 添加一个每5秒执行一次的任务
	id, err := scheduler.Add("@every 5s", myTask)
	if err != nil {
		fmt.Println("添加任务失败:", err)
		return
	}
	
	fmt.Println("任务ID:", id)
	
	// 让程序运行一段时间以便观察任务执行
	time.Sleep(30 * time.Second)
}

高级功能

1. 使用 Cron 表达式

// 每天上午10:15执行
id, err := scheduler.Add("15 10 * * *", myTask)

// 每周一至周五上午9点执行
id, err := scheduler.Add("0 9 * * 1-5", myTask)

2. 带参数的任务

func paramTask(name string, count int) {
	fmt.Printf("任务执行 - 名称: %s, 计数: %d\n", name, count)
}

func main() {
	scheduler := chronos.NewScheduler()
	defer scheduler.Stop()

	// 添加带参数的任务
	id, err := scheduler.Add("@every 10s", paramTask, "测试任务", 42)
	if err != nil {
		fmt.Println("添加任务失败:", err)
		return
	}
	
	time.Sleep(30 * time.Second)
}

3. 管理任务

func main() {
	scheduler := chronos.NewScheduler()
	defer scheduler.Stop()

	// 添加任务
	id1, _ := scheduler.Add("@every 5s", func() { fmt.Println("任务1") })
	id2, _ := scheduler.Add("@every 7s", func() { fmt.Println("任务2") })

	// 暂停任务
	scheduler.Pause(id1)
	fmt.Println("任务1已暂停")
	time.Sleep(10 * time.Second)

	// 恢复任务
	scheduler.Resume(id1)
	fmt.Println("任务1已恢复")
	time.Sleep(10 * time.Second)

	// 移除任务
	scheduler.Remove(id2)
	fmt.Println("任务2已移除")
	time.Sleep(10 * time.Second)
}

4. 一次性任务

func main() {
	scheduler := chronos.NewScheduler()
	defer scheduler.Stop()

	// 10秒后执行一次
	scheduler.Add("@after 10s", func() {
		fmt.Println("一次性任务执行")
	})

	time.Sleep(15 * time.Second)
}

错误处理

func main() {
	scheduler := chronos.NewScheduler()
	defer scheduler.Stop()

	// 添加任务时捕获错误
	_, err := scheduler.Add("invalid schedule", func() {})
	if err != nil {
		fmt.Println("错误:", err)
	}

	// 尝试操作不存在的任务
	err = scheduler.Pause("nonexistent-id")
	if err != nil {
		fmt.Println("错误:", err)
	}
}

最佳实践

  1. 资源清理:始终使用 defer scheduler.Stop() 确保程序退出时清理资源
  2. 任务ID管理:保存任务ID以便后续管理
  3. 错误处理:检查所有可能返回错误的操作
  4. 并发安全:Go-Chronos 是并发安全的,可以在多个 goroutine 中使用

完整示例

package main

import (
	"fmt"
	"time"
	
	"github.com/yourusername/go-chronos/chronos"
)

func main() {
	// 创建调度器
	scheduler := chronos.NewScheduler()
	defer scheduler.Stop()

	// 添加多个任务
	id1, _ := scheduler.Add("@every 3s", func() {
		fmt.Println("快速任务 -", time.Now().Format("15:04:05"))
	})

	id2, _ := scheduler.Add("@every 7s", func() {
		fmt.Println("慢速任务 -", time.Now().Format("15:04:05"))
	})

	// 10秒后暂停快速任务
	time.AfterFunc(10*time.Second, func() {
		scheduler.Pause(id1)
		fmt.Println("快速任务已暂停")
	})

	// 20秒后恢复快速任务
	time.AfterFunc(20*time.Second, func() {
		scheduler.Resume(id1)
		fmt.Println("快速任务已恢复")
	})

	// 30秒后移除慢速任务
	time.AfterFunc(30*time.Second, func() {
		scheduler.Remove(id2)
		fmt.Println("慢速任务已移除")
	})

	// 让主程序运行40秒
	time.Sleep(40 * time.Second)
	fmt.Println("程序结束")
}

Go-Chronos 提供了简单而强大的任务调度功能,适合需要轻量级定时任务管理的 Golang 应用程序。通过合理的任务管理和错误处理,可以构建可靠的后台任务系统。

回到顶部