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

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

Johnathan Smith
Johnathan Smith原創
2025-03-10 11:53:11829瀏覽

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