知识文档

从产品基础使用文档,开发指导,操作指南,常见问题等方面阐述,助你快速部署建站系统。

Thinkphp6 think-queue redis 执行异步任务
经验分享 2021-11-06 12

配置文件queue.php

‘redis’,
‘connections’ => [
‘sync’ => [
‘type’ => ‘sync’,
],
‘database’ => [
‘type’ => ‘database’,
‘queue’ => ‘default’,
‘table’ => ‘jobs’,
],
‘redis’ => [
‘type’ => ‘redis’,
‘queue’ => ‘default’,
‘host’ => Env::get(‘redis.redis_hostname’, ‘127.0.0.1’),
‘port’ => Env::get(‘redis.port’, 6379),
‘password’ => Env::get(‘redis.redis_password’, ‘’),
‘select’ => Env::get(‘redis.select’, 0),
‘timeout’ => 0,
‘persistent’ => false,
],
],
‘failed’ => [
‘type’ => ‘none’,
‘table’ => ‘failed_jobs’,
],
];



测试队列文件PublicController.php

 uniqid(),  
        'time' => time(),  
    \];  
    //将该任务推送到消息队列,等待对应的消费者去执行  
    //这里只是负责将数据添加到相应的队列名称的队列里,消费者与生产者并无联系  
    $isPushed = Queue::push($jobHandlerClassName , $orderData, $jobQueueName);  
    if( $isPushed !== false )\{  
        echo date('Y-m-d H:i:s') . " 队列添加成功";  
    \}else\{  
        echo '队列添加失败';  
    \}  
\}  
}



队列执行文件DemoJob.php

checkDatabaseToSeeIfJobNeedToBeDone($data);
if(!$isJobStillNeedToBeDone){
$job->delete();
return;
}
    $isJobDone = $this->orders($data);  
    if ($isJobDone) \{  
        //如果任务执行成功,记得删除任务  
        $job->delete();  
    \}else\{  
        //通过这个方法可以检查这个任务已经重试了几次了  
        if ($job->attempts() > 3)\{  
            $job->delete();  
            //也可以重新发布这个任务  
            //print("Hello Job will be availabe again after 2s."."\\n");  
            //$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行  
        \}  
    \}  
\}  
/\*\*  
 \* @Title: checkDatabaseToSeeIfJobNeedToBeDone  
 \* @Description: todo(有些消息在到达消费者时,可能已经不再需要执行了)  
 \* @param array $data  
 \* @throws  
 \*/  
private function checkDatabaseToSeeIfJobNeedToBeDone($data)\{  
    return true;  
\}  
/\*\*  
 \* @Title: orders  
 \* @Description: todo(数据处理)  
 \* @throws  
 \*/  
public function orders($data)  
\{  
    //对订单进行数据库操作或其他等等  
    for($i=0;$iinsert($arr);  
    \}  
    print("Job has been done and deleted"."\\n");  
    return true;  
\}  
}



开启队列进程

php think queue:work —queue orderJobQueue


或者(linux)


php think queue:work —queue orderJobQueue —daemon


注意:php think queue:work —queue 将执行默认队列


加入收藏