elsayed85/laravel-queue-monitor
Composer 安装命令:
composer require elsayed85/laravel-queue-monitor
包简介
Queue Monitoring for Laravel Database Job Queue
README 文档
README
This package offers monitoring like Laravel Horizon for database queue.
Features
- Monitor jobs like Laravel Horizon for any queue
- Handle failing jobs with storing exception
- Monitor job progress
- Get an estimated time remaining for a job
- Store additional data for a job monitoring
Installation
composer require elsayed85/laravel-queue-monitor
Configuration
Copy configuration & migration to your project:
php artisan vendor:publish --provider="elsayed85\QueueMonitor\Providers\QueueMonitorProvider"
Migrate the Queue Monitoring table. The table name can be configured in the config file or via the published migration.
php artisan migrate
Usage
To monitor a job, simply add the elsayed85\QueueMonitor\Traits\IsMonitored Trait.
use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use elsayed85\QueueMonitor\Traits\IsMonitored; // <--- class ExampleJob implements ShouldQueue { use Dispatchable; use InteractsWithQueue; use Queueable; use SerializesModels; use IsMonitored; // <--- }
Important! You need to implement the Illuminate\Contracts\Queue\ShouldQueue interface to your job class. Otherwise, Laravel will not dispatch any events containing status information for monitoring the job.
UI
You can enable the optional UI routes by calling Route::queueMonitor() inside your route file, similar to the official ui scaffolding.
Route::prefix('jobs')->group(function () { Route::queueMonitor(); });
Routes
| Route | Action |
|---|---|
/ |
Show the jobs table |
See the full configuration file for more information.
Extended usage
Progress
You can set a progress value (0-100) to get an estimation of a job progression.
use Illuminate\Contracts\Queue\ShouldQueue; use elsayed85\QueueMonitor\Traits\IsMonitored; class ExampleJob implements ShouldQueue { use IsMonitored; public function handle() { $this->queueProgress(0); // Do something... $this->queueProgress(50); // Do something... $this->queueProgress(100); } }
Chunk progress
A common scenario for a job is iterating through large collections.
This example job loops through a large amount of users and updates it's progress value with each chunk iteration.
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Database\Eloquent\Collection; use elsayed85\QueueMonitor\Traits\IsMonitored; class ChunkJob implements ShouldQueue { use IsMonitored; public function handle() { $usersCount = User::count(); $perChunk = 50; User::query() ->chunk($perChunk, function (Collection $users) use ($perChunk, $usersCount) { $this->queueProgressChunk($usersCount‚ $perChunk); foreach ($users as $user) { // ... } }); } }
Progress cooldown
To avoid flooding the database with rapidly repeating update queries, you can set override the progressCooldown method and specify a length in seconds to wait before each progress update is written to the database. Notice that cooldown will always be ignore for the values 0, 25, 50, 75 and 100.
use Illuminate\Contracts\Queue\ShouldQueue; use elsayed85\QueueMonitor\Traits\IsMonitored; class LazyJob implements ShouldQueue { use IsMonitored; public function progressCooldown(): int { return 10; // Wait 10 seconds between each progress update } }
Custom data
This package also allows setting custom data in array syntax on the monitoring model.
use Illuminate\Contracts\Queue\ShouldQueue; use elsayed85\QueueMonitor\Traits\IsMonitored; class CustomDataJob implements ShouldQueue { use IsMonitored; public function handle() { $this->queueData(['foo' => 'Bar']); // WARNING! This is overriding the monitoring data $this->queueData(['bar' => 'Foo']); // To preserve previous data and merge the given payload, set the $merge parameter true $this->queueData(['bar' => 'Foo'], true); } }
In order to show custom data on UI you need to add this line under config/queue-monitor.php
'ui' => [ ... 'show_custom_data' => true, ... ]
Only keep failed jobs
You can override the keepMonitorOnSuccess() method to only store failed monitor entries of an executed job. This can be used if you only want to keep failed monitors for jobs that are frequently executed but worth to monitor. Alternatively you can use Laravel's built in failed_jobs table.
use Illuminate\Contracts\Queue\ShouldQueue; use elsayed85\QueueMonitor\Traits\IsMonitored; class FrequentSucceedingJob implements ShouldQueue { use IsMonitored; public static function keepMonitorOnSuccess(): bool { return false; } }
Retrieve processed Jobs
use elsayed85\QueueMonitor\Models\Monitor; $job = Monitor::query()->first(); // Check the current state of a job $job->isFinished(); $job->hasFailed(); $job->hasSucceeded(); // Exact start & finish dates with milliseconds $job->getStartedAtExact(); $job->getFinishedAtExact(); // If the job is still running, get the estimated seconds remaining // Notice: This requires a progress to be set $job->getRemainingSeconds(); $job->getRemainingInterval(); // Carbon\CarbonInterval // Retrieve any data that has been set while execution $job->getData(); // Get the base name of the executed job $job->getBasename();
Model Scopes
use elsayed85\QueueMonitor\Models\Monitor; // Filter by Status Monitor::failed(); Monitor::succeeded(); // Filter by Date Monitor::lastHour(); Monitor::today(); // Chain Scopes Monitor::today()->failed();
Upgrading
This package was inspired by gilbitron's laravel-queue-monitor which is not maintained anymore.
elsayed85/laravel-queue-monitor 适用场景与选型建议
elsayed85/laravel-queue-monitor 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 18 次下载、GitHub Stars 达 0, 最近一次更新时间为 2021 年 08 月 03 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 elsayed85/laravel-queue-monitor 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 elsayed85/laravel-queue-monitor 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 18
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-08-03
