thinkphp 6.0 使用 topthink/queue 3.0 的Bug

在使用的时候,莫名的不可以用,原来是 topthink/queue 3.0 有bug

运行监听 php think queue:list --queue helloJobQueue 【内容见下个博客或是百度】

遇见的Bug 如下

问题1:

[2020-12-23T17:03:24+08:00][error] [0]Argument 2 passed to think\queue\Worker::process() must be an instance of think\queue\Job, null given, called in D:\phpstudy_pro\WWW\queue\vendor\topthink\think-queue\src\queue\Worker.php on line 261
 

修改 vendor\topthink\think-queue\src\queue\Worker.php runNextJob 方法

public function runNextJob($connectorName, $queue, $delay = 0, $sleep = 3, $maxTries = 0)
    {

        $job = $this->getNextJob($this->queue->driver($connectorName), $queue);

        if ($job) {
            $this->runJob($job$connectorName$maxTries$delay);
            return;
        }

        $this->sleep($sleep);
    }

问题2:

[2020-12-23T17:04:59+08:00][error] [0]Cannot use object of type stdClass as array
 

修改 vendor\topthink\think-queue\src\queue\connector\Redis.php 里面的 retrieveNextJob 方法

protected function retrieveNextJob($queue)
    {
        if (!is_null($this->blockFor)) {
            return $this->blockingPop($queue);
        }

        $job      = $this->redis->lpop($queue);
        $reserved = false;

        if ($job) {
            $reserved = json_decode($jobtrue);
            $reserved['attempts']++;
            $reserved = json_encode($reserved);
            $this->redis->zAdd($queue . ':reserved'$this->availableAt($this->retryAfter), $reserved);
        }

        return [$job$reserved];
    }

得已正确运行

posted @ 2020-12-23 17:08  ziyoujike  阅读(674)  评论(0)    收藏  举报