Laravel 队列重复执行同一个任务
我在laravel中使用队列执行任务,任务的逻辑大体是循环插入数据(这里我就要说一下了,循环里面最好不要执行插入/修改
操作)。
这是大体代码:
$data=array(这是数据);
foreach ($data as $key => $value) {
//这里是判断数据是否已存在
//code....
$table1 = new Table1;
$table1->field1=$value['field1'];
$table1->field2=$value['field2'];
if($table1->save()){
$table2 = new Table2;
$table2->table1_id=$table1->id;
$table2->field1=$value['field3'];
$table2->field2=$value['field4'];
$table2->save();
}
}
但是我发现插入到数据库里的数据有大量重复的数据。(注释:我用的redis驱动队列)
我查看队列执行日志,发现是因为我任务的执行时间太长,导致任务过期,重新把任务放到队列里面,然后问题就出来了,我超时的任务并没有停止掉,而我新放到队列里的任务也在执行,这就导致有两个队列在同时执行一个任务。
我查看了文档发现,有这么一个东西:
注:参数项
--timeout
的值应该始终小于配置项retry_after
的值,这是为了确保队列进程总在任务重试以前关闭。如果--timeout
比retry_after
大,那么你的任务可能被执行两次。
然后我就去检查了我的参数设置,我的--timeout
为500,而retry_after
才90,怪不得会重复执行
本作品采用《CC 协议》,转载必须注明作者和本文链接
``` --timeout 600 ``