【Laravel】データベースキューを GUI で監視するためのライブラリ Laravel-Queue-Monitor の紹介

romanzipp/Laravel-Queue-Monitor: Monitoring Laravel Jobs with your Database
 Laravel には非同期実行用のキューという仕組みがあります。これは主に同期的(大体 HTTP リクエストです)に実行すべきことを定義した Job クラスの呼び出しを Queue(Redis, データベースなど実装は色々)に保存し、 Worker(コマンドラインのプロセス)が適宜 Queue から Job を取り出して実行するという仕組みです。
キュー 8.x Laravel
 要件によっては割と重要な位置を占める機能なのですが、デフォルトではどこでどのプロセスが今何をしているのか追うのが手間です。主な理由としては、Job, Queue, Worker がコードで直接つながっていない、それぞれが好き勝手なタイミングで動いているように見える、といったあたりがあげられます。これを簡単に解決するためにはキューをいい感じに可視化するソフトが欲しくなります。Laravel 公式のそういったソフトないしライブラリとしては Horizon と Telescope があります。しかしながら Horizon は Redis を Queue としたキューの可視化にしか使えず、Telescope はキューの可視化以外の機能が山盛りでキューについてのみ知りたい時はいささか冗長です。
Laravel Horizon 8.x Laravel
Laravel Telescope 8.x Laravel

 Laravel-Queue-Monitor はいい感じにその隙間に入ります。Laravel-Queue-Monitor ではデータベースを Queue にしたキューにも対応しており、大がかりな準備は不要です。
romanzipp/Laravel-Queue-Monitor: Monitoring Laravel Jobs with your Database
 準備は、次コマンドでインストールして

composer require romanzipp/laravel-queue-monitor

 次コマンドで必要な設定ファイルとテーブル定義マイグレーションをダンプして

php artisan vendor:publish --provider="romanzipp\QueueMonitor\Providers\QueueMonitorProvider"

 次コマンドでマイグレーションを実行して

php artisan migration

 次の様にルーティング定義を記述するのみです。

/**
Route::prefix('jobs')->group(function () {
    Route::queueMonitor();
});
*/
// ↑でも動くらしいのですが、自分はダメでしたので↓の様に直定義しました


// app/Providers/RouteServiceProvider.php
// よくある web.php 以下では既定 namespace 定義と衝突して不便です
use romanzipp\QueueMonitor\Controllers\DeleteMonitorController;
use romanzipp\QueueMonitor\Controllers\PurgeMonitorsController;
use romanzipp\QueueMonitor\Controllers\ShowQueueMonitorController;

Route::prefix('jobs')->group(function () {
    Route::get('', ShowQueueMonitorController::class)->name('queue-monitor::index');

    if (config('queue-monitor.ui.allow_deletion')) {
        Route::delete('monitors/{monitor}', DeleteMonitorController::class)->name('queue-monitor::destroy');
    }

    if (config('queue-monitor.ui.allow_purge')) {
        Route::delete('purge', PurgeMonitorsController::class)->name('queue-monitor::purge');
    }
});

 こうすれば、後は見たい Job クラスに次の様に監視することを定義した trait を use させるだけで、キューの監視が始まります。

use romanzipp\QueueMonitor\Traits\IsMonitored;

class ExampleJob implements ShouldQueue
{
    use IsMonitored;
}

 監視の結果は先に定義した URL のページから見ることができ、次画像の様に今どの Job がどれだけどの様に走っているか、過去どの様に動いていたか分かるようになります。
 

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG