检查是否安装redis(没有请自行百度安装)
phpinfo:
配置 thinkphp-queue,没有请执行 composer require topthink/think-queue 加入:
创建 队列 文件:
use think\Queue;
class TestQueue
{
// 测试
public function queue()
{
// 推迟 n 秒执行 $queue = '指定队列名'
Queue::later('2', 'app\message\job\Work','aa@qq.com','');
// 执行 Work 的 send 方法
//Queue::push('app\message\job\Work@send','aa@qq.com');
// 默认执行 Work 的 fire 方法
//Queue::push('app\message\job\Work','aa@qq.com');
echo '加入队列成功';
}
}
队列逻辑处理 文件:
namespace app\message\job;
use think\queue\Job;
class Work
{
// 默认执行的方法
public function fire(Job $job, $data)
{
$isJobDone = $this->send($data);
if ($isJobDone) {
//成功删除任务
$job->delete();
} else {
//任务轮询4次后删除
if ($job->attempts() > 3) {
// 第1种处理方式:重新发布任务,该任务延迟10秒后再执行
//$job->release(10);
// 第2种处理方式:原任务的基础上1分钟执行一次并增加尝试次数
//$job->failed();
// 第3种处理方式:删除任务
$job->delete();
}
}
}
/**
* 根据消息中的数据进行实际的业务处理
* @param array|mixed $data 发布任务时自定义的数据
* @return boolean 任务执行的结果
*/
private function send($data)
{
// 开始执行队列的逻辑
echo 'int ....';
echo PHP_EOL;
echo 'data: ' .$data;
echo PHP_EOL;
// ...
return true;
}
}
浏览器访问:
http://127.0.0.1/message/testqueue (路由自行配置)
后台监听:
php think queue:listen
php think queue:listen --queue 'queuename' // 监听指定队列
参考文档:https://github.com/coolseven/notes/blob/master/thinkphp-queue/README.md
守护进程:https://blog.csdn.net/qq_34856247/article/details/86741533
swoole 队列参考:http://www.voidcn.com/article/p-haxrdkng-bop.html
分享一些学习资料:一些学习资料