首页 >后端开发 >php教程 >Laravel的清洁器队列连锁店的枚举集成

Laravel的清洁器队列连锁店的枚举集成

Johnathan Smith
Johnathan Smith原创
2025-03-10 11:53:11832浏览

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