温馨提示×

thinkphp在ubuntu怎么用队列

小樊
43
2026-10-01 15:39:22
栏目: 编程语言

在 Ubuntu 上使用 ThinkPHP 队列,通常分为 环境准备 → 配置队列 → 编写任务 → 启动队列_worker 几个步骤。下面以 ThinkPHP 6 / 8 + Redis 驱动 为例(最常用)。


一、环境准备(Ubuntu)

1. 安装 PHP 扩展

sudo apt update
sudo apt install php php-cli php-redis redis-server

2. 启动 Redis

sudo systemctl enable redis-server
sudo systemctl start redis-server

3. 安装 ThinkPHP 队列依赖

composer require topthink/think-queue

二、配置队列(ThinkPHP)

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,
        ],
    ],
];

三、创建队列任务

1. 生成任务类

php think queue:job

或手动创建:

app/job/TestJob.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, $data);

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

方式一:命令行直接运行(测试)

php think queue:work

或指定队列:

php think queue:work --queue default

方式二:后台常驻(生产推荐)

使用 nohup

nohup php think queue:work --daemon &

使用 Supervisor(推荐)

安装:

sudo apt install supervisor

新增配置:

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

内容:

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

生效:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start thinkphp-queue

六、常用命令

# 查看队列状态
php think queue:restart

# 监听模式(开发)
php think queue:listen

# 查看失败任务
php think queue:failed

七、常见坑

✅ Redis 必须启动
✅ 使用 --daemon 性能更好
✅ 生产环境一定用 Supervisor
✅ 任务里不要写 die/exit


如果你用的是 ThinkPHP 5 / 数据库队列 / RabbitMQ,或者想要 失败重试机制示例,可以继续问我。

0 踩