首頁 > 後端開發 > php教程 > Laravel的清潔器隊列連鎖店的枚舉集成

Laravel的清潔器隊列連鎖店的枚舉集成

Johnathan Smith
發布: 2025-03-10 11:53:11
原創
826 人瀏覽過

Cleaner Queue Chains with Laravel's Enum Integration

Laravel 現在支持在 Bus facade 的 onQueue 方法中直接使用帶後備值的枚舉,無需手動訪問枚舉的 value 屬性。此改進在處理作業鍊和隊列時,創建更簡潔、更具表達力的代碼。

此增強功能在構建需要根據優先級、資源需求或業務邏輯定向到不同隊列的複雜作業管道時尤其有用。

use App\Enums\QueueType;

// 直接使用枚举,无需 ->value
Bus::chain($jobs)
    ->onQueue(QueueType::Background)
    ->dispatch();
登入後複製

以下是實現文檔處理系統的實際示例:

<?php namespace App\Enums;

enum ProcessingQueue: string
{
    case Immediate = 'realtime';
    case Standard = 'default';
    case Batch = 'batch-process';
    case LowPriority = 'low-priority';
}

namespace App\Services;

use App\Enums\ProcessingQueue;
use App\Jobs\ProcessDocument;
use App\Jobs\GenerateThumbnail;
use App\Jobs\ExtractMetadata;
use App\Jobs\NotifyUser;
use App\Models\Document;
use Illuminate\Support\Facades\Bus;

class DocumentProcessor
{
    public function process(Document $document, bool $isPriority = false)
    {
        $queue = $isPriority
            ? ProcessingQueue::Immediate
            : ProcessingQueue::Standard;

        Bus::chain([
            new ProcessDocument($document),
            new ExtractMetadata($document),
            new GenerateThumbnail($document),
            new NotifyUser($document->user, 'Document processing complete')
        ])
        ->onQueue($queue)
        ->dispatch();

        return $document;
    }

    public function batchProcess(array $documentIds)
    {
        foreach ($documentIds as $id) {
            $document = Document::find($id);

            Bus::chain([
                new ProcessDocument($document),
                new GenerateThumbnail($document)
            ])
            ->onQueue(ProcessingQueue::Batch)
            ->dispatch();
        }
    }
}
登入後複製

此增強功能簡化了隊列實現,同時保持類型安全並提高了代碼可讀性。

以上是Laravel的清潔器隊列連鎖店的枚舉集成的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板