1.安装
composer require topthink/think-queue
2.配置
application\extra\queue.php
2.1 Redis配置(推荐使用)
<?php
return [
'connector' => 'Redis', // Redis 驱动 Database Redis
'expire' => 60, // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null
'default' => 'default', // 默认的队列名称
'host' => '127.0.0.1', // redis 主机ip
'port' => 6379, // redis 端口
'password' => '123456', // redis 密码
'select' => 1, // 使用哪一个 db,默认为 db0
'timeout' => 0, // redis连接的超时时间
'persistent' => false, // 是否是长连接
];
2.2 Mysql配置(不推荐)
1.数据库设置
CREATE TABLE `prefix__jobs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`queue` varchar(255) NOT NULL,
`payload` longtext NOT NULL,
`attempts` tinyint(3) unsigned NOT NULL,
`reserved` 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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.配置文件
return [
'connector' => 'Sync',
'connector' => 'Database', // 数据库驱动
'expire' => null, // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null
'default' => 'default', // 默认的队列名称
'table' => 'jobs', // 存储消息的表名,不带前缀
'dsn' => [],
];
3.创建任务类
1.单模块项目推荐使用 `app\job` 作为任务类的命名空间
2.多模块项目可用使用 `app\module\job` 作为任务类的命名空间
3.任务类不需继承任何类,如果这个类只有一个任务,那么就只需要提供一个`fire`方法就可以了,如果有多个任务,就写多个方法
4.发布任务
use think\Queue
$job 是任务名
$data 是你要传到任务里的参数 ,
$queue 队列名,指定这个任务是在哪个队列上执行,可不填
立即执行
Queue::push($job, $data = '', $queue = null)
在$delay秒后执行
Queue::later($delay, $job, $data = '', $queue = null)
Queue::pop($queue = null)
Queue::marshal()
5.监听任务并执行(可配合supervisor使用,保证进程常驻)
php think queue:listen --queue 队列名称
php think queue:work --queue 队列名称 --daemon(不加--daemon为执行单个任务)
1