用户自定义定时任务的php实现
需求:
一个类似滴答清单任务提醒的功能.用户可以自定义 每天 每周星期几,每月几号 接收提醒,方式不限于 短信 电子邮件 公众号推送.
例如,用户a 设定一个每天3点提醒的任务 用户b设定一个每周三5点提醒的任务,用户c设定一个每月3号提醒的任务.
一般我们可以用crontab表达式来现实,但是成千上万的用户,有上万的定时任务怎么样用crontab实现呢? 而且php没有好的定时任务系统.
我的解决办法是用 一个或者几个定时任务来实现.
用户的定时任务可以用一个表来保存.记录 定时任务的类型, 是单次还是重复,类型是每天,每周,还是每年每月. 具体提醒的 小时和分钟.
然后使用其他语言的定时任务系统,或者laravel自动的定时任务系统(分钟级别就够)来触发.
xxl-job-admin(java) 或者 jiacrontab (go)
写一个laravel自定义命令 用 以上的定时任务触发 例如 php artisan MyCrontab.
用carbon包,可以得出,现在这一分钟是 星期几,几号,小时,分钟,月份.
carbon.nesbot.com/docs/
然后写sql语句找出符合条件的任务出来.写入laravel队列来执行.
建议用户的定时任务可以设置几种状态, 未执行,已入队列,执行完队列,把状态设置回未执行.
还有单次执行的任务和周期性重复的任务分开表存,查询的时候也分开查.最多几个 定时任务,就可以把 每年 每月 每日的任务查询出写入队列.
这个是其中一种实现方式.给大家参考一下.这种方式的缺点就是 要每分钟查表,如果这一分钟的用户定时任务有几百万.可能就不够时间写入队列.
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: