温馨提示×

ubuntu thinkphp队列怎么使用

小樊
46
2026-10-22 02:46:35
栏目: 编程语言

在 Ubuntu + ThinkPHP 环境下使用队列(Queue),一般步骤如下(以 Redis 队列 为例,最常用):


一、环境准备(Ubuntu)

1. 安装 Redis

sudo apt update
sudo apt install redis-server

启动 Redis:

sudo systemctl start redis
sudo systemctl enable redis

测试:

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

二、ThinkPHP 安装队列扩展

2. 安装 think-queue

composer require topthink/think-queue

三、配置队列(Redis 示例)

编辑配置文件:

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

四、创建队列任务(Job)

3. 创建 Job 类

php think queue:job SendMail

生成文件:

app/job/SendMail.php

示例:

namespace app\job;

use think\queue\Job;

class SendMail
{
    public function fire(Job $job, $data)
    {
        // 处理任务
        echo "发送邮件给:" . $data['email'] . PHP_EOL;

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

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

五、推送任务到队列

4. 在控制器中调用

use think\facade\Queue;

Queue::push(\app\job\SendMail::class, [
    'email' => 'test@qq.com'
]);

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

5. Ubuntu 中运行队列

php think queue:work

或(推荐生产):

php think queue:work --daemon

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

6. 使用 nohup

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

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

八、常用命令

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

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

九、常见问题

✅ Redis 没启动 → 队列不执行
✅ 忘记 php think queue:work
✅ 任务类命名空间错误
✅ Ubuntu 用户权限问题(用 www-data)


如果你用的是 数据库队列 / RabbitMQ / 定时任务结合队列,可以告诉我,我可以给你对应方案。

0 踩