composer require topthink/think-queue
配置
安装好之后,会在 conifg
目录下生成一个 queue.php
配置文件。
目前支持三种队列数据储存方式:
[InvalidArgumentException]
The migration class name "CreateJobsTable" already exists
方式 |
说明 |
---|---|
sync |
同步执行,有新队列任务则通过 ThinkPHP 的事件 |
database |
数据库存储,新队列任务数据存储到数据库,队列执行程序再从数据库中读取任务数据 |
redis |
Redis 存储,新队列任务数据存储到 Redis,队列执行程序再从 Redis 中读取任务数据 |
'sync',
// 连接配置
'connections' => [
// 同步执行
'sync' => [
// 连接方式
'type' => 'sync',
],
// 数据库
'database' => [
'type' => 'database',
// 队列名
'queue' => 'default',
// 表名
'table' => 'jobs',
// 数据连接配置(database.connections)
'connection' => null,
],
// Redis
'redis' => [
'type' => 'redis',
'queue' => 'default',
// 服务器IP
'host' => '127.0.0.1',
// 服务器端口
'port' => 6379,
// 认证密码
'password' => '',
// 数据库
'select' => 0,
// 超时时间(0代表不限制)
'timeout' => 0,
// 持久化
'persistent' => false,
],
],
// 失败队列任务记录
'failed' => [
// 记录方式:none=不记录,database=记录在数据库
'type' => 'none',
// 数据库表名
'table' => 'failed_jobs',
],
];
数据库初始化
使用脚本
如果是选择数据库作为队列任务数据储存方式,那边需要创建对应的表。
think-queue
是使用 think-migration
来创建数据库表的,所以需要先安装 think-migration
。
composer require topthink/think-migration
然后再使用这三条命令来完成表创建
php think queue:table
php think queue:failed-table
php think migrate:run
初始化完毕之后,删除 think-migration
,因为后续使用用不上了。
delete();
return;
}
// 如果重试发送超过3次都没成功,那就记录错误一条日志
if ($job->attempts() > 3) {
error_log('邮件发送失败');
return;
}
// 当然,如果测试时间不想因为失败而导致删除任务,可以重新发布任务
$job->release(5);
}
/**
* 任务1
* @param Job $job 当前任务
* @param mixed $data 任务数据
*/
public function one(Job $job, $data)
{
}
/**
* 任务失败
* @param array $data 任务数据
* @param \Exception $e 异常
*/
public function failed($data, $e)
{
// 可以在这里记录失败日志
}
}
发布任务
$job = \app\job\Mail::class;
$data = [
'to' => '86849180@qq.com',
'subject' => '测试邮件',
'message' => '门前,大桥下,游来一群鸭~~'
];
// 方式一:推送任务到队列,并立即执行
\think\facade\Queue::push($job, $data = '');
// 方式二:推送任务到队列,5 秒后执行
\think\facade\Queue::later(5, $job, $data);
// 方式三:推送任务1到队列,并立即执行
\think\facade\Queue::push($job . '@one', $data);
监听和执行任务
在终端执行
php think queue:work
调试完毕后,可以使用 Supervisor 来保持队列的进程常驻。
参考配置:
[program:queue-work]
command=php think queue:work
directory=/www/wwwroot/wsdzhwl/
user=www
priority=999
numprocs=1
可能遇到的问题
1.The migration class name "CreateJobsTable" already exists
这是之前运行过 php think queue:table
,需要删除下 database/migrations
[InvalidArgumentException]
The migration class name "CreateJobsTable" already exists
本文共 个字数,平均阅读时长 ≈ 分钟,您已阅读:0时0分0秒。
649494848