5.1.12 队列扩展无法使用

浏览:601 发布日期:2018/05/10 分类:ThinkPHP5专区
版本:thinkphp5.1.12

队列版本:think-queue2.0

驱动:Database

在 push 操作时会出现 SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '81' for key 'PRIMARY'

具体SQL:

INSERT INTO `ft_jobs` (`queue` , `payload` , `attempts` , `reserved` , `reserved_at` , `available_at` , `created_at` , `id`) VALUES (:data__queue , :data__payload , :data__attempts , :data__reserved , NULL , :data__available_at , :data__created_at , :data__id)

源代码中并没有 id :protected function pushToDatabase($delay, $queue, $payload, $attempts = 0)
    {
        return $this->db->name($this->options['table'])->insert([
            'queue'        => $this->getQueue($queue),
            'payload'      => $payload,
            'attempts'     => $attempts,
            'reserved'     => 0,
            'reserved_at'  => null,
            'available_at' => time() + $delay,
            'created_at'   => time()
        ]);
    }
原因是 其中 $this->db-> 在操作时把已经有的所有条件都添加其中

并且在其它 方法操作 中也存在同样的情况 获取下一个任务生成的SQL为 SELECT * FROM `ft_jobs` WHERE  `queue` = 'game'  AND `reserved` = 1  AND `reserved_at` <= 1525945591  AND `queue` = 'game'  AND `reserved` = 0  AND `available_at` <= 1525945651 ORDER BY `id` ASC LIMIT 1   FOR UPDATE可以看出 reserved 条件冲突,不能获取到数据,而无法执行下一个任务

暂时解决办法:把所有数据库操作 $this->db-> 改为 Db::

请官方给出修复方案
最佳答案
评论( 相关
后面还有条评论,点击查看>>