使用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 分享