laravel队列使用
xuexi 2026-10-04 22:00:20 发表在:PHP 查看数:21

修改env中的配置

 QUEUE_CONNECTION=database

创建2张表

 # 生成迁移文件
php artisan queue:table
php artisan queue:failed-table
# 执行迁移,创建数据表
php artisan migrate

创建队列任务 |Job会生成文件:app/Jobs/SendSmsJob.php

会生成文件:app/Jobs/SendSmsJob.php

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

// 必须实现 ShouldQueue 接口,才会进入队列异步执行
class SendSmsJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $phone;
    protected $content;

    // 构造函数:传入任务需要的数据
    public function __construct($phone, $content)
    {
        $this->phone = $phone;
        $this->content = $content;
    }

    // 队列实际执行的业务逻辑
    public function handle()
    {
        // 这里写耗时逻辑:发短信、邮件等
        echo "给 {$this->phone} 发送短信:{$this->content}";
    }

    // 任务失败回调(可选)
    public function failed(\Throwable $exception)
    {
        // 失败时做记录,比如日志通知
    }
}

分发任务(把任务推送到队列)|可以在控制器、路由里调用分发。

use App\Jobs\SendSmsJob;

// 分发任务到默认队列
SendSmsJob::dispatch('13800138000', '您的验证码123456');

// 指定队列名称(方便区分不同任务,如sms队列)
SendSmsJob::dispatch('13800138000', '验证码')->onQueue('sms');

// 延迟执行:10秒后执行
SendSmsJob::dispatch('13800138000', '验证码')->delay(10);

启动命令

/www/server/php/74/bin/php -d memory_limit=512M artisan queue:work --timeout=0 --memory=400 --tries=1
  • -d memory_limit=512M CLI 队列单独内存上限,不影响网站 php-fpm
  • --timeout=0 关闭任务超时(生成大量溯源码长时间运行)
  • --memory=400 进程内存超过 400M 自动销毁重建,防止内存泄漏
  • --tries=1 任务失败不重试(和你代码 public $tries=1 保持一致)
最近访问时间:2026-10-05 03:22:35
知识库:467条鸣谢:TAY  备案号:蜀ICP备2024090044号