Thinkphp6 think-queue redis执行异步操作

原创
小哥 3年前 (2022-11-03) 阅读数 18 #PHP
文章标签 thinkphpThinkphp6redis

配置文件queue.php

  
// +----------------------------------------------------------------------  
use think\facade\Env;

return [  
default     => 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;$i<100;$i++){  
$arr[name] = mt\_rand(111111,999999);  
Db::name(demo)->insert($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 将执行默认队列
版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除