使用imtigger/laravel-job-status优雅地追踪Laravel队列任务进度

王林
发布: 2025-06-21 12:12:14
原创
458人浏览过

在构建大型 Laravel 应用时,后台任务的处理常常是不可或缺的一部分。然而,如何有效地监控这些任务的执行状态和进度,以便及时发现问题并提供更好的用户体验,一直是一个挑战。imtigger/laravel-job-status 是一款优秀的 Laravel 扩展包,它提供了一种简洁而强大的方式来跟踪队列任务的执行情况。 Composer在线学习地址:学习地址imtigger/laravel-job-status 通过以下特性解决了 Laravel 队列任务监控的难题:

  • 任务状态追踪: 记录任务的队列名称、尝试次数、状态(queued, executing, finished, retrying, failed)以及创建、更新、开始和完成的时间戳。
  • 进度更新: 允许你设置任务的当前进度和最大进度,并自动计算百分比,方便展示进度条。
  • 错误处理: 自动捕获失败任务的异常信息。
  • 自定义输入/输出: 允许你存储任务的输入参数和输出结果。
  • Eloquent 模型: 提供 JobStatus Eloquent 模型,方便你查询和管理任务状态。
  • 多驱动支持: 支持 Laravel 内置的所有队列驱动(null, sync, database, beanstalkd, redis, sqs)。

使用 imtigger/laravel-job-status 非常简单,只需以下几个步骤:

  1. 安装:
<code class="bash">composer require imtigger/laravel-job-status</code>
登录后复制
  1. 在你的 Job 中使用 Trackable trait:
<code class="php"><?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Imtigger\LaravelJobStatus\Trackable;

class MyJob implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels, Trackable;

    public function __construct(array $params)
    {
        $this->prepareStatus();
        $this->params = $params;
        $this->setInput($this->params);
    }

    public function handle()
    {
        $max = 100;
        $this->setProgressMax($max);

        for ($i = 0; $i <= $max; $i++) {
            // 模拟耗时操作
            sleep(1);
            $this->setProgressNow($i);
        }

        $this->setOutput(['result' => 'success']);
    }
}</code>
登录后复制
  1. 在你的 Job dispatcher 中获取 $jobStatusId
<code class="php"><?php

namespace App\Http\Controllers;

use App\Jobs\MyJob;
use Illuminate\Foundation\Bus\DispatchesJobs;
use App\Http\Controllers\Controller;

class MyController extends Controller
{
    use DispatchesJobs;

    public function runJob()
    {
        $job = new MyJob(['param1' => 'value1']);
        $this->dispatch($job);

        $jobStatusId = $job->getJobStatusId();

        // 将 $jobStatusId 返回给前端,用于查询任务状态
        return response()->json(['job_status_id' => $jobStatusId]);
    }
}</code>
登录后复制
  1. 使用 $jobStatusId 查询任务状态:
<code class="php"><?php

namespace App\Http\Controllers;

use Imtigger\LaravelJobStatus\JobStatus;
use App\Http\Controllers\Controller;

class MyController extends Controller
{
    public function getJobStatus($jobStatusId)
    {
        $jobStatus = JobStatus::find($jobStatusId);

        // 返回任务状态信息给前端
        return response()->json($jobStatus);
    }
}</code>
登录后复制

通过以上步骤,你就可以轻松地在你的 Laravel 应用中实现队列任务的进度跟踪和状态监控。你可以根据 JobStatus 模型中的字段,自定义前端展示,例如进度条、状态信息等,从而提升用户体验。

imtigger/laravel-job-status 的优势在于:

  • 简单易用: 只需要几个简单的步骤就可以集成到你的 Laravel 应用中。
  • 功能强大: 提供了丰富的任务状态信息和进度更新功能。
  • 灵活定制: 允许你自定义任务的输入/输出,以及前端展示。

在实际应用中,imtigger/laravel-job-status 可以用于:

疯狂翻译师App
疯狂翻译师App

支持屏幕、图片、视频字幕、文档、漫画等多种翻译,准确率高,操作简单。

疯狂翻译师App 104
查看详情 疯狂翻译师App
  • 文件上传/处理: 显示文件上传和处理的进度。
  • 数据导入/导出: 显示数据导入和导出的进度。
  • 报表生成: 显示报表生成的进度。
  • 任何需要长时间处理的任务: 提供实时反馈,提升用户体验。

总之,imtigger/laravel-job-status 是一个非常实用的 Laravel 扩展包,它可以帮助你更好地管理和监控队列任务,从而提升你的应用的可用性和用户体验。

以上就是使用imtigger/laravel-job-status优雅地追踪Laravel队列任务进度的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号