使用 Artisan::queue 将命令放到队列内执行,在任务执行前,如何从队列中先删除此任务?
先说想要问的问题:使用Artisan::queue队列的command,如何在command执行之前,先在队列内删除此条记录,避免任务超时,队列重复执行的情况?
下面是问题背景。。。
之前开发的时候图方便,所有的邮件发送操作均是使用php artisan send:mail test@test.com --content_id=1
这种方式来做的。
后面直接使用 Artisan::queue() ,将命令放到队列内来实现多进程发送。使用redis作为数据库。
起初一开始非常好,速度也很正常,但是基本上6-8个小时左右,就会出现任务缓慢、直至失败。
有时还会给之前队列的邮件地址发送邮件。
昨天晚上查了一些资料,有说laravel队列默认执行等待时间是60秒,如果未执行完毕就重新放入队列,但我也依照资料写的内容,修改了expire的时间,甚至我怕不够久,还设置成了非常大的数字。
retry_after 跟 expire 均设置成 60x60x24x7。
资料:博客:使用 Laravel Queue 不得不明白的知识
早上4点多修改完成之后,运行到今天下午3点都比较正常,但是3点之后就速度变慢,然后基本上等于暂停了。同时还给之前队列到的邮件地址发送了邮件。。。。。
我horizon.php 里面,就设置了timeout 为60x60。
这个问题出现很久了,尝试了很多种办法来处理,但是始终不知道怎么解决。。如果说需要把command写成job再重新写一遍代码,那就太痛苦了。。。。
所以想请教一下,有没有人知道 使用Artisan::queue队列的command,如何在command执行之前,先在队列内删除此条记录?
推荐文章: