温馨提示×

ubuntu thinkphp怎么用队列

小樊
46
2026-10-13 10:20:54
栏目: 编程语言

在 Ubuntu + ThinkPHP 环境下使用队列(Queue),一般步骤是:安装队列依赖 → 配置队列驱动 → 编写任务 → 启动队列 worker。下面以 Redis 驱动 为例(最常用)。


一、环境准备(Ubuntu)

1. 安装 Redis

sudo apt update
sudo apt install redis-server

启动并设置开机自启:

sudo systemctl start redis
sudo systemctl enable redis

测试:

redis-cli ping
# 返回 PONG 表示成功

二、ThinkPHP 安装队列扩展

ThinkPHP 官方队列扩展:

composer require topthink/think-queue

三、配置队列

编辑配置文件:

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

示例:

<?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)
    {
        echo "任务失败:" . $data['name'];
    }
}

五、推送任务到队列

在控制器中:

use think\facade\Queue;

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

或延迟执行:

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

六、启动队列监听(关键)

开发环境

php think queue:work

生产环境(推荐)

php think queue:work --daemon

后台运行:

nohup php think queue:work --daemon > queue.log 2>&1 &

七、生产环境守护进程(推荐)

使用 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
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

八、查看队列状态

redis-cli
> keys *
> llen queues:default

常见问题

✅ 任务不执行

  • worker 没启动
  • Redis 没开
  • 类名写错

✅ Ubuntu 权限问题

sudo chown -R www-data:www-data runtime

如果你用的是 数据库队列 / RabbitMQ / 定时任务,或者 ThinkPHP 6 / 8 具体版本,可以告诉我,我可以给你更精确的配置。

0 踩