本文简单介绍消息队列的使用,以及在使用过程中的注意事项。
项目环境:thinkphp6.0.3 + think-queue3.0
1、使用 composer 安装 thinkphp6 与 think-queue
# 安装 thinkphp6
composer create-project topthink/think 6.0.*
# 安装 think-queue
composer require topthink/think-queue
2、queue 的配置
think-queue 内置了 Redis,Database,Sync等驱动,
这里介绍使用Redis做消息队列存储,
结合supervisor进程管理使队列常驻进程。
配置文件位于 config/queue.php
return [
// 驱动类型,可选择 sync(默认):同步执行,database:数据库驱动,redis:Redis驱动//或其他自定义的完整的类名
'default' => 'redis', // Redis驱动
'connections' => [
...
'redis' => [
'type' => 'redis', // Redis 驱动
'queue' => 'default', // 默认的队列名称
'host' => '127.0.0.1', // redis 主机ip
'port' => 6379, // redis 端口
'password' => '123456', // redis 密码
'select' => 0, // 使用哪一个 db,默认为 db0
'timeout' => 0, // redis连接的超时时间
'persistent' => false, // 是否是长连接
],
...
]
];
3、创建任务类
单模块项目推荐使用 app\job 作为任务类的命名空间 多模块项目可用使用 app\module\job 作为任务类的命名空间 也可以放在任意可以自动加载到的地方
任务类不需继承任何类,如果这个类只有一个任务,那么就只需要提供一个fire方法就可以了,如果有多个小任务,就写多个方法,下面发布任务的时候会有区别
每个方法会传入两个参数 think\queue\Job $job(当前的任务对象) 和 $data(发布任务时自定义的数据)
namespace app\job;
use think\queue