使用imtigger/lar*el-job-status优雅地追踪Lar*el队列任务进度

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

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

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

  1. 安装:
composer require imtigger/lar*el-job-status
  1. 在你的 Job 中使用 Trackable trait:
<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Imtigger\Lar*elJobStatus\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']);
    }
}
  1. 在你的 Job dispatcher 中获取 $jobStatusId
<?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]);
    }
}
  1. 使用 $jobStatusId 查询任务状态:
<?php

namespace App\Http\Controllers;

use Imtigger\Lar*elJobStatus\JobStatus;
use App\Http\Controllers\Controller;

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

        // 返回任务状态信息给前端
        return response()->json($jobStatus);
    }
}

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

imtigger/lar*el-job-status 的优势在于:

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

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

JoyPix AI JoyPix AI

轻松制作AI视频、AI数字人,支持文生视频、声音克隆

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

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

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

本文转自网络,如有侵权请联系客服删除。