package
0.1.1
Repository: https://github.com/lupguo/go-shim.git
Documentation: pkg.go.dev

# README

crond lib

crond包基于github.com/go-co-op/gocron的基础上,添加了分布式锁定操作; 基于分布式锁的操作,用以解决在集群模式下,多cron可能在同一时刻发起调度的问题

使用

单机环境下执行cron调度

func ExampleStartTest() {
	var job1Fn = func(jobID int) {
		log.Printf("exec job[#%d] fn", jobID)
	}

	// 准备job任务
	job1 := NewJob("job1", func() { job1Fn(1) }, "* * * * *")
	job2 := NewJob("job2", func() { job1Fn(2) }, "*/2 * * * *")

	// 准备scheduler调度器
	locker, err := NewRedisLocker("redis://user:password@localhost:6789/3?dial_timeout=3&db=1&read_timeout=6s&max_retries=2")
	if err != nil {
		log.Fatalf("parse redis url got err: %s", err)
	}

	crond := NewScheduler(&Config{
		Async:            false,           // 不阻塞主协程
		SingletonModeAll: true,            // 调度器不会重复调度同类型新的job任务
	}, locker)

	// 添加job任务
	err = crond.AddJobs(job1, job2)
	if err != nil {
		log.Fatalf("crond add job got err: %s", err)
	}

	// job执行
	crond.Start()
}

# Functions

NewMockLocker creates a new mock instance.
NewRedisLocker 创建一个Redis分布式锁 Examples: redis://user:password@localhost:6789/3?dial_timeout=3&db=1&read_timeout=6s&max_retries=2.
NewScheduler 初始化一个cron 调度器.
NewTask 创建一个任务.

# Constants

cron格式`*/1 * * * *`,分(0-59) 时(0-23) 日(1-31) 月(1-12) 天(0-6).
cron格式`*/1 * * * *`,分(0-59) 时(0-23) 日(1-31) 月(1-12) 天(0-6).
cron格式`*/1 * * * *`,分(0-59) 时(0-23) 日(1-31) 月(1-12) 天(0-6).
凌晨1:00执行.
每小时整点执行.
cron格式`*/1 * * * *`,分(0-59) 时(0-23) 日(1-31) 月(1-12) 天(0-6).
每个月.

# Variables

DefaultScheduleCfg 默认Schedule配置.

# Structs

MockLocker is a mock of DistributeLocker interface.
MockLockerMockRecorder is the mock recorder for MockLocker.
RedisLocker 基于Redis实现的分布式锁,.
Scheduler Cron调度程序.
SchedulerCfg Cron调度器配置.
Task 待执行的JOB任务.

# Interfaces

DistributeLocker 分布式锁接口 该接口主要是针对多个JOB执行时刻,进行并发控制,确保在不同机器上的Job仅执行一次行.