queue扩展地址:
topthink/think-queue - PackagistThe ThinkPHP6 Queue Package
https://packagist.org/packages/topthink/think-queue使用composer 拉取扩展包
composer require topthink/think-queue
拉取扩展之后在config文件夹中找到queue.php配置驱动,这是演示数据库驱动,可根据项目选择合适的驱动。

在tp\vendor\topthink\think-queue\src\queue\connector\Database.php可查看要创建的数据表

创建数据库
CREATE TABLE `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 DEFAULT '0',
`reserve_time` int(10) unsigned DEFAULT NULL,
`available_time` int(10) unsigned NOT NULL,
`create_time` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
一、创建执行任务方法
在tp\app文件下创建job文件夹,新建队列执行文件例如:job1.php

<?php
namespace app\job;
use think\queue\Job;
use think\facade\Log;
class Job1
{
public function fire(Job $job, $data)
{
//....这里执行具体的任务
if ($job->attempts() > 3) {
//通过这个方法可以检查这个任务已经重试了几次了
Log::record('执行失败', 'notice');
}else{
try {
//执行相对应的任务
$this->Add($data);
} catch (\Exception $ex) {
Log::record('执行错误', 'notice');
}
}
//如果任务执行成功后 记得删除任务,不然这个任务会重复执行,直到达到最大重试次数后失败后,执行failed方法
$job->delete();
Log::record('删除任务', 'notice');
// 也可以重新发布这个任务
// $job->release($delay); //$delay为延迟时间
}
public function failed($data){
Log::record('队列失败了', 'notice');
// ...任务达到最大重试次数后,失败了
}
public function Add($data)
{
// 执行任务
Log::record('执行相对应的任务', 'notice');
}
}
二、向执行任务方法推送消息(传递参数)。
在控制器或者命令行,向queue推送消息,
例如在控制器中:

<?php
namespace app\controller;
use think\facade\Log;
use think\facade\Queue;
use app\BaseController;
class Index extends BaseController
{
public function index()
{
echo phpinfo();
}
/**
* @param $job 执行的队列方法
* @param $data 传递的数据参数
* @param $queue 队列的名称,默认:default
*/
public function hello()
{
$job = "app\job\job1";
Queue::push($job, $data = '123455', $queue = null);
}
}
执行控制器方法,数据库中会记录一条消息。

然后在命令行中执行:
php think queue:listen
php think queue:work
php think queue:listen --queue=default
php think queue:work --queue=default
php think queue:listen --queue=(数据库中queue的名称)

执行后,会一直监听消息队列,只有有新的队列,就会执行队列。

本文介绍了如何在ThinkPHP6框架中安装并配置`topthink/think-queue`扩展来实现消息队列,重点讲解了数据库驱动的设置、创建数据库表以及队列任务的创建和执行。此外,还展示了如何向队列推送消息以及在命令行中监听和处理队列任务。
https://www.kancloud.cn/manual/thinkphp6_0/1037640
2781

被折叠的 条评论
为什么被折叠?



