thinkphp5中任务队列的常见使用方法
2024-10-11 20:59:13
在ThinkPHP5中使用队列,可以按照以下步骤进行:
1. 配置队列驱动
首先,你需要在 application/extra/queue.php
文件中配置队列驱动。如果没有这个文件,可以手动创建。
<?php
return [
'connector' => 'database', // 队列驱动,支持 database、redis 等
'expire' => 60, // 任务的过期时间,默认为60秒
'default' => 'default', // 默认的队列名称
'table' => 'jobs', // 存储消息的表名,需要手动创建
'dsn' => [], // 数据库连接配置
];
2. 创建队列表
根据配置文件中的 table
参数,创建相应的队列表。例如,如果配置的是 jobs
表,可以使用以下SQL语句创建表:
CREATE TABLE `jobs` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`queue` varchar(255) NOT NULL,
`payload` longtext NOT NULL,
`attempts` tinyint(3) unsigned NOT NULL,
`reserved_at` int(10) unsigned DEFAULT NULL,
`available_at` int(10) unsigned NOT NULL,
`created_at` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `jobs_queue_index` (`queue`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. 推送任务到队列
使用 think\queue\Job
类将任务推送到队列中。
use think\queue\Job;
// 推送任务到队列
$job = new Job('default', 'app\job\SendEmail', ['email' => 'user@example.com']);
$job->push();
4. 创建任务类
创建一个任务类来处理具体的任务逻辑。例如,创建 application/job/SendEmail.php
文件:
<?php
namespace app\job;
use think\queue\Job;
class SendEmail
{
public function fire(Job $job, $data)
{
// 处理任务逻辑
$email = $data['email'];
// 发送邮件
$result = send_email($email);
if ($result) {
// 任务成功,删除任务
$job->delete();
} else {
// 任务失败,重新入队
$job->release();
}
}
}
5. 运行队列监听器
使用 queue:listen
命令来运行队列监听器,处理队列中的任务。
php think queue:listen
6. 其他队列命令
ThinkPHP5还提供了其他一些队列相关的命令:
queue:work
:处理一个任务后立即退出queue:restart
:重启队列监听器queue:flush
:清空队列中的所有任务
示例代码
推送任务到队列
use think\queue\Job;
// 推送任务到队列
$job = new Job('default', 'app\job\SendEmail', ['email' => 'user@example.com']);
$job->push();
创建任务类
<?php
namespace app\job;
use think\queue\Job;
class SendEmail
{
public function fire(Job $job, $data)
{
// 处理任务逻辑
$email = $data['email'];
// 发送邮件
$result = send_email($email);
if ($result) {
// 任务成功,删除任务
$job->delete();
} else {
// 任务失败,重新入队
$job->release();
}
}
}
通过以上步骤,你可以在ThinkPHP5中使用队列来处理异步任务。
还没有人发表评论