用户自定义定时任务的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 协议》,转载必须注明作者和本文链接
推荐文章: