tp5.1 使用think-queue 消息队列
安装tp5.1
composer create-project topthink/think=5.1.* ./
安装 think-queue (注:think-queue 最新的版本需要 tp6.x 的支持,所以本文的安装版本为 2.0.4)
composer require topthink/think-queue 2.0.4
判断think-queue是否安装成功
php think queue:work -h
配置 /config/queue.php
return [ 'connector' => 'Redis', // 队列驱动,这里使用Redis 'expire' => 60, // 任务的过期时间,默认为60秒 'default' => 'default', // 默认的队列名称 'host' => '127.0.0.1', // Redis主机IP 'port' => 6379, // Redis端口 'password' => '', // Redis密码 'select' => 0, // 使用哪一个db,默认为db0 'timeout' => 0, // Redis连接的超时时间 'persistent' => false, // 是否是长连接 ];
创建添加队例类 /application/index/controller/Index.php
<?php namespace app\index\controller; use think\Controller; use think\Queue; class Index extends Controller { public function queueTest() { $data = [ 'email' => 'user@example.com', // 其他需要传递给队列任务的参数 ]; // 推送SendEmail任务到队列 $isPushed = Queue::push('app\queue\job\SendEmail', $data); if ($isPushed !== false) { echo '添加队列成功'.time(); } else { echo '添加队列失败'; } } }
创建处理队例类 /application/queue/job/SendEmail.php
<?php namespace app\queue\job; use think\queue\Job; class SendEmail { public function fire(Job $job, $data) { // 处理发送邮件的逻辑 // $data是传递给队列任务的参数 // 例如:发送邮件的代码(这里只是示例,实际使用时需要替换为真实的邮件发送逻辑) // Mail::send(...); // 处理完任务后删除任务 //测试数据 file_put_contents("test.txt",json_encode($data).'-'.date('Y-m-d H:i:s')); $job->delete(); } }
启动 think-queue 进程守护
cd /www/wwwroot/test.51zuso.com php think queue:work --daemon
访问测试添加队例方法
http://www.xxx.com/index/index/queueTest
查队例是否成功执行了 成功执行网站根目录可以看到 test.txt 文件
----------------------------------------------------------------------------------------------------
注意问题
php think queue:work --daemon 终端窗口一关闭守护进程就失效
使用 nohup 命令:
nohup 命令允许你在退出终端会话后继续运行命令。你可以尝试使用 nohup php think queue:work --daemon & 来启动守护进程。这将在后台运行守护进程,并且即使你关闭了终端窗口,它也会继续运行。注意,& 符号是将命令放入后台运行的标志。
tp5.1 使用think-queue 版本不一至
think-queue 最新的版本需要 tp6.x 的支持,所以本文的安装版本为 2.0.4
查看与关闭进程
查看
ps aux | grep 'php think queue:work --daemon'
关闭
kill 8888