首页 留言板 后台管理

搜索中...

未找到与 "" 相关的文章

换个关键词试试看

输入关键词搜索文章

支持搜索标题、内容、摘要

Laravel 队列系统:异步任务与失败重试机制

admin · 2026-04-05 06:57 · Laravel · 2

Laravel 队列提供了一套统一的 API 来处理异步任务,支持多种后端驱动如 Redis、数据库、Beanstalkd 等。

配置队列

.env 中设置队列驱动:

QUEUE_CONNECTION=redis

创建任务类

php artisan make:job SendEmailJob
class SendEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function handle()
    {
        Mail::to($this->user->email)->send(new WelcomeMail());
    }
}

分发任务

SendEmailJob::dispatch($user);

// 延迟执行
SendEmailJob::dispatch($user)->delay(now()->addMinutes(10));

// 指定队列
SendEmailJob::dispatch($user)->onQueue('emails');

运行队列工作者

php artisan queue:work

# 指定连接和队列
php artisan queue:work redis --queue=emails

# 后台运行
php artisan queue:work --daemon

失败任务处理

当任务失败时,Laravel 会自动将任务放入失败队列:

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

# 重试失败任务
php artisan queue:retry 1

# 重试所有失败任务
php artisan queue:retry all

在任务类中自定义失败处理:

public function failed(Throwable $exception)
{
    Log::error('邮件发送失败: ' . $exception->getMessage());
}

任务中间件

public function middleware()
{
    return [new RateLimited('emails')];
}

监控

使用 Laravel Horizon(基于 Redis)可以可视化监控队列状态:

composer require laravel/horizon
php artisan horizon:install

评论 (0)

暂无评论,来说两句吧!

发表评论