dcron icon indicating copy to clipboard operation
dcron copied to clipboard

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

Open libi opened this issue 2 years ago • 6 comments
trafficstars

可以考虑将 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 avatar Apr 28 '23 08:04 libi

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

libi avatar Apr 28 '23 08:04 libi

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

dxyinme avatar Jan 03 '24 12:01 dxyinme

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

AH-dark avatar Jan 06 '24 04:01 AH-dark

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

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

dxyinme avatar Jan 07 '24 04:01 dxyinme

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

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

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

AH-dark avatar Jan 07 '24 04:01 AH-dark

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

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

注入时使用cronIns实例即可。

libi avatar Jan 08 '24 01:01 libi

已实现

dxyinme avatar Apr 09 '24 03:04 dxyinme

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

libi avatar Apr 09 '24 05:04 libi