laravel队列使用
修改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=512MCLI 队列单独内存上限,不影响网站 php-fpm--timeout=0关闭任务超时(生成大量溯源码长时间运行)--memory=400进程内存超过 400M 自动销毁重建,防止内存泄漏--tries=1任务失败不重试(和你代码public $tries=1保持一致)
最近访问时间:2026-10-05 03:22:35