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($job, true);
$reserved['attempts']++;
$reserved = json_encode($reserved);
$this->redis->zAdd($queue . ':reserved', $this->availableAt($this->retryAfter), $reserved);
}
return [$job, $reserved];
}
得已正确运行

浙公网安备 33010602011771号