数据库
首页 > 数据库> > php – Laravel作业队列未使用Redis驱动程序进行处理

php – Laravel作业队列未使用Redis驱动程序进行处理

作者:互联网

我正在创建一个作业,将其推送到自定义队列,并尝试使用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工匠队列:listen什么都不显示(只有不相关的事件广播).这里发生了什么?

解决方法:

你还记得运行php工匠队列吗:listen –queue = live?

您需要在运行listen命令时定义队列名称,否则您最终只会侦听默认队列.

如果您想在生产中运行多个队列和管理事物,您可以使用类似于Upstart(与设置Laravel队列无直接关系,但提供了一个良好的起点)或Supervisor来管理流程.这两种都可以在Forge和Homestead上找到.

最后假设您使用的是Laravel 5,您可能需要考虑运行php artisan queue:work –daemon –queue = live,因为这样可以减少运行worker的CPU开销,因为它不会为每个作业重新加载框架.但是,您必须记住在为作业部署新代码时重新启动工作程序,否则将无法获取任何内容.

标签:php,redis,laravel,publish-subscribe
来源: https://codeday.me/bug/20190516/1116486.html