在ThinkPHP中实现任务投递和消息队列管理,可以使用ThinkPHP自带的队列处理类库,即think\queue
。具体实现步骤如下:
在composer.json
文件中添加以下代码:
"require": {
"topthink/think-queue": "^1.1"
}
然后在命令行中执行composer update
进行安装。
在config/queue.php
文件中配置队列,例如:
<?php
return [
'default' => 'redis',
'connections' => [
'redis' => [
'driver' => 'redis',
'queue' => 'default',
'connection' => 'default',
'expire' => 60,
],
],
];
默认使用Redis作为队列驱动,队列名称为default
,过期时间为60秒。
在app\job
目录下创建任务类,例如:
<?php
namespace app\job;
class TestJob
{
public function fire($job, $data)
{
// 处理任务逻辑
$job->delete(); // 删除任务
}
}
在控制器中使用以下代码投递任务:
\think\Queue::push('app\job\TestJob', $data, 'default');
其中,app\job\TestJob
为任务类名,$data
为任务数据,default
为队列名称。
在命令行中执行以下代码启动消费者:
php think queue:work --queue default
其中,default
为队列名称。执行该命令后,消费者会不断从队列中取出任务并执行。
参考文档:ThinkPHP官方文档-队列