Thinkphp6 think-queue redis执行异步操作
原创配置文件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 将执行默认队列 版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123

