libi / dcron

轻量分布式定时任务库 a lightweight distributed job scheduler library
MIT License
422 stars 73 forks source link

可以考虑包内实现定时任务库 #48

Closed libi closed 2 months ago

libi commented 1 year ago

可以考虑将 robfig/cron 完全内置: 对内可以实现更精准的任务执行时机判断。 对外用户调用接口将与robfig/cron完全一致,只通过替换包名即可无缝替换单机模式。 如果需要分布式支持,只需要配置额外的 option 选项开启分布式。

例如开启某个定时任务: cron 用法

 c := cron.New(cron.WithSeconds()) 
 c.AddJob("* * * * * ?", job)
 c.Start()

dcron用法

 c := dcron.New(dcron.WithSeconds()) 
 c.AddJob("* * * * * ?", job)
 c.Start()

如需开启分布式时:

 c := dcron.New(dcron.WithSeconds(),dcron.WithDistributed(dcron.Driver)) 
 c.AddJob("* * * * * ?", job)
 c.Start()
libi commented 1 year ago

实现该特性需要完全理解 robfig/cron 的设计,扩展分布式状态设计。

dxyinme commented 6 months ago

在最新的master中已经将robfig/cron的内容fork到dcron仓库内并添加了logger相关的修改,之后会继续改进

AH-dark commented 6 months ago

使用一个 boolean value 来控制是否使用分布式可能更好一些,driver 应当在初始化时就被注入

dxyinme commented 6 months ago

使用一个 boolean value 来控制是否使用分布式可能更好一些,driver 应当在初始化时就被注入

个人感觉是不需要的,如果不用分布式的话大家可能就直接用robfig/cron了

AH-dark commented 6 months ago

使用一个 boolean value 来控制是否使用分布式可能更好一些,driver 应当在初始化时就被注入

个人感觉是不需要的,如果不用分布式的话大家可能就直接用robfig/cron了

但比如我用 fx 进行全局依赖注入,如果不用分布式则需要单独引入一个 robfig/cron 的实例,并不是很方便

libi commented 6 months ago

初始化时用option的方式也实现类似bool的效果 例如

enable := true
var cronIns *Dcron
if enable {
   cronIns = dcron.New(dcron.WithDistributed(dcron.Driver))
}else {
   cronIns = dcron.New()
}

注入时使用cronIns实例即可。

dxyinme commented 2 months ago

已实现

libi commented 2 months ago

@dxyinme 我用这个项目申请了2个jetbrains Licenses, 给你一个呀 给我发个jetbrains的登录邮箱把你拉进来.