簡體   English   中英

Laravel作業隊列未使用Redis驅動程序進行處理

[英]Laravel Job Queue not processing using Redis driver

我正在創建一個作業,將其推送到自定義隊列,並嘗試使用Redis驅動程序,然后在它到達隊列時處理該作業,但沒有成功:

class MyController extends Controller {
    public function method() {
        $job = (new UpdateLiveThreadJob())->onQueue('live');
        $this->dispatch($job);
    }
}

這是我的隊列配置:

    'default' => env('QUEUE_DRIVER'),

    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue'  => 'default',
        'expire' => 60,
    ],

這是我的.env文件:

# Drivers (Queues & Broadcasts)
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=redis
BROADCAST_DRIVER=redis

這是我的工作:

class UpdateLiveThreadJob extends Job implements SelfHandling, ShouldQueue
{
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // Rerender content
        $templatedOutput = view('templates.livethreadcontents')->with([
            'updates' => collect(Redis::lrange('live:updates', 0, -1))->reverse()->map(function($update) {
                return json_decode($update);
            })
        ])->render();

        // Connect to external service

        // Update Thread
    }
}

實際上,我可以更改handle方法,以確保它在工作中沒有任何東西實際上導致它失敗,並且它仍然不處理:

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        print_r('test');
    }

使用Redis,我可以看到它被推入隊列:

> lrange queues:live 0 -1
> // json encoded job present
> llen queues:live
> // shows there is a job in the queue

然而,據我所知,它實際上從未發生過。 觀看php artisan queue:listen什么都不顯示(只有不相關的事件廣播)。 這里發生了什么?

在Laravel 5.3中,隊列發生了變化。 現在你將運行php artisan queue:work --queue=live ,這應該做你需要的。

我在下面留下了原來的答案。


你還記得運行php artisan queue:listen --queue=livephp artisan queue:listen --queue=live

您需要在運行listen命令時定義隊列名稱,否則您最終只會監聽default隊列。

如果您想在生產中運行多個隊列和管理事物,您可以使用Upstart (與設置Laravel隊列無直接關系,但提供良好的起點)或Supervisor來管理流程。 這兩種都可以在Forge和Homestead上找到。

最后假設您使用的是Laravel 5,您可能需要考慮運行php artisan queue:work --daemon --queue=live因為這樣可以減少運行worker的CPU開銷,因為它不會為每個作業重新加載框架。 但是,您必須記住在為作業部署新代碼時重新啟動工作程序,否則將無法獲取任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM