温馨提示×

ubuntu ThinkPHP怎样使用队列

小樊
48
2026-10-19 05:34:32
栏目: 编程语言

在 Ubuntu + ThinkPHP 环境下使用队列,一般是通过 ThinkPHP 官方队列扩展 topthink/think-queue 来实现。下面按从零开始的步骤说明。


一、环境准备(Ubuntu)

1. 安装 PHP 与扩展

sudo apt update
sudo apt install php php-cli php-mbstring php-dom php-curl php-zip

确认 PHP 版本:

php -v

二、安装 ThinkPHP 与队列扩展

1. 创建 ThinkPHP 项目(如已有可跳过)

composer create-project topthink/think tp-queue
cd tp-queue

2. 安装队列扩展

composer require topthink/think-queue

三、配置队列

1. 配置队列连接

编辑 config/queue.php

常见配置示例(Redis):

return [
    'default' => 'redis',

    'connections' => [
        'redis' => [
            'type'       => 'redis',
            'queue'      => 'default',
            'host'       => '127.0.0.1',
            'port'       => 6379,
            'password'   => '',
            'select'     => 0,
            'timeout'    => 0,
            'persistent' => false,
        ],
    ],
];

如果使用数据库队列:

php think queue:table
php think migrate

四、创建队列任务

1. 生成任务类

php think queue:job

或手动创建:

<?php
namespace app\job;

use think\queue\Job;

class TestJob
{
    public function fire(Job $job, $data)
    {
        // 处理任务
        echo "处理任务:" . $data['name'] . PHP_EOL;

        // 删除任务
        $job->delete();
    }

    // 失败处理
    public function failed($data)
    {
        // 记录日志
    }
}

五、推送任务到队列

在控制器中:

use think\facade\Queue;

Queue::push(\app\job\TestJob::class, ['name' => 'ThinkPHP']);

或延迟执行:

Queue::later(60, \app\job\TestJob::class, ['name' => '延迟任务']);

六、启动队列消费者(关键)

Ubuntu 下运行队列

php think queue:work

或:

php think queue:listen

work 性能更好,listen 适合开发


七、后台稳定运行(生产环境)

使用 Supervisor(推荐)

1. 安装 Supervisor

sudo apt install supervisor

2. 创建配置

sudo nano /etc/supervisor/conf.d/queue.conf

内容:

[program:think-queue]
command=php /var/www/tp-queue/think queue:work
autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/queue.log

3. 启动

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start think-queue

八、常见问题

1. 队列不执行?

  • 是否运行了 queue:work
  • Redis 是否启动
  • Supervisor 是否运行

2. 任务失败?

php think queue:failed
php think queue:retry all

九、总结流程

写 Job → 推送 Queue → 启动 Worker → 自动消费

如果你用的是 ThinkPHP 6 / 8、Redis / 数据库队列、或 Docker 环境,可以告诉我,我可以给你更具体的配置示例。

0 踩