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

在构建大型 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. 安装:
composer require imtigger/laravel-job-status
  1. 在你的 Job 中使用 Trackable trait:
<?php  namespace AppJobs;  use IlluminateBusQueueable; use IlluminateQueueSerializesModels; use IlluminateQueueInteractsWithQueue; use IlluminateContractsQueueShouldQueue; use ImtiggerLaravelJobStatusTrackable;  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']);     } }
  1. 在你的 Job dispatcher 中获取 $jobStatusId:
<?php  namespace AppHttpControllers;  use AppJobsMyJob; use IlluminateFoundationBusDispatchesJobs; use AppHttpControllersController;  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]);     } }
  1. 使用 $jobStatusId 查询任务状态:
<?php  namespace AppHttpControllers;  use ImtiggerLaravelJobStatusJobStatus; use AppHttpControllersController;  class MyController extends Controller {     public function getJobStatus($jobStatusId)     {         $jobStatus = JobStatus::find($jobStatusId);          // 返回任务状态信息给前端         return response()->json($jobStatus);     } }

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

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

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

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

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

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

以上就是使用imtigger/

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享