侧边栏壁纸
博主昵称
梦之中小俊

以前高中时,羡慕大学考试只要及格就行;现在大学了,怀念高中考试及不及格都行??

PHP

think-queue 的安装配置及使用

梦之中小俊
2025-05-13 / 0 评论 / 4 阅读 / 推送成功!
composer require topthink/think-queue

 

配置

安装好之后,会在 conifg 目录下生成一个 queue.php 配置文件。

目前支持三种队列数据储存方式:

[InvalidArgumentException]
The migration class name "CreateJobsTable" already exists

方式

说明

sync

同步执行,有新队列任务则通过 ThinkPHP 的事件 Event 来直接触发执行

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秒。
3

打赏

评论 (0)

OωO
  • ::(呵呵)
  • ::(哈哈)
  • ::(吐舌)
  • ::(太开心)
  • ::(笑眼)
  • ::(花心)
  • ::(小乖)
  • ::(乖)
  • ::(捂嘴笑)
  • ::(滑稽)
  • ::(你懂的)
  • ::(不高兴)
  • ::(怒)
  • ::(汗)
  • ::(黑线)
  • ::(泪)
  • ::(真棒)
  • ::(喷)
  • ::(惊哭)
  • ::(阴险)
  • ::(鄙视)
  • ::(酷)
  • ::(啊)
  • ::(狂汗)
  • ::(what)
  • ::(疑问)
  • ::(酸爽)
  • ::(呀咩爹)
  • ::(委屈)
  • ::(惊讶)
  • ::(睡觉)
  • ::(笑尿)
  • ::(挖鼻)
  • ::(吐)
  • ::(犀利)
  • ::(小红脸)
  • ::(懒得理)
  • ::(勉强)
  • ::(爱心)
  • ::(心碎)
  • ::(玫瑰)
  • ::(礼物)
  • ::(彩虹)
  • ::(太阳)
  • ::(星星月亮)
  • ::(钱币)
  • ::(茶杯)
  • ::(蛋糕)
  • ::(大拇指)
  • ::(胜利)
  • ::(haha)
  • ::(OK)
  • ::(沙发)
  • ::(手纸)
  • ::(香蕉)
  • ::(便便)
  • ::(药丸)
  • ::(红领巾)
  • ::(蜡烛)
  • ::(音乐)
  • ::(灯泡)
  • ::(开心)
  • ::(钱)
  • ::(咦)
  • ::(呼)
  • ::(冷)
  • ::(生气)
  • ::(弱)
  • ::(狗头)
泡泡
阿鲁
颜文字
取消
  1. 头像
    6767 Lv.1
    iPhone · Safari
    沙发

    画图

    回复
  2. 头像
    6767 Lv.1
    Windows 10 · Google Chrome
    板凳

    表情

    回复
  3. 头像
    透露 Lv.2
    Android · QQ Browser
    第30楼

    649494848

    回复