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