laravel 队列之坑

作者 bluse wang 日期 2016-12-13
laravel 队列之坑

批量发消息之类的工作,很是适合放到后端,慢慢处理。那使用laravel的Queue和Job,就成为必须。

简单过了一下文档后,就写好了发布上线了。感觉确是不错。

不过近期突然爆了一个奇怪的问题,有些群发总是没完没了的重复发送。但是当我测试时,总是一切正常!

一时蒙了个逼!又是debug(队列的debug很是繁琐低效!)又是Google又是百度。一翻搜罗,有人说是时间的问题。

60s!

队列将一个任务发出后,如果60s内没执行完,就会认为处理过程异常。它会把这个任务再重新执行一遍!

嘿嘿了!

翻了下源码,在InteractsWithQueuetrait里发现了一个delete方法!

在我的Job开始handle后,先执行一下$this->delete();把这个任务删除。这样即便过了60s后,它想重新启动也没有了。这问题也就暂时解决了!

但是!如果这个任务处理过程中出现异常,也会丧失2次重新执行的机会。所以Laravel的Job中最好只处理一件简单的原子化的事。不要在批量里处理批量。