Laravel 5批量队列作业具有相同数据

时间:2015-05-14 22:39:04

标签: database laravel queue

我正在寻找一种在L5中批量排队作业的方法,这些作业都有不同的数据。

我希望能够做到这样的事情:

$jobs = [];
foreach($items as $item)
{
    $jobs[] = new Job($item->someValue);
}
Queue::bulk('desired_queue', $jobs);

使用数据库队列驱动程序时,对于执行查询的每个作业,在循环中排队大量作业的速度非常慢。或者,我在我的windows dev框中安装了Redis,并且在循环中使用redis排队大量作业非常快,但是,作业运行的性能实际上降低了,我不确定我们的生产服务器环境是否支持redis ,所以暂时我假设我们将使用数据库驱动程序。

使用数据库驱动程序时,是否有任何方法可以排队大量作业并避免对每个作业执行查询?

感谢。

编辑:

通过查看框架如何实现这一点,我可以执行以下操作,但是,这不是很优雅,并且对默认实现所做的任何更改都是盲目的。

$now = Carbon::now()->getTimestamp();
$jobs = [];
foreach($items as $item)
{
    $job = new Job($item->someValue);
    $payload = json_encode([
        'job' => 'Illuminate\Queue\CallQueuedHandler@call',
        'data' => ['command' => serialize(clone $job)],
    ]);
    $jobs[] = [
        'queue' => 'desired_queue',
        'payload' => $payload,
        'attempts' => 0,
        'reserved' => 0,
        'reserved_at' => null,
        'available_at' => $now,
        'created_at' => $now
    ];
}
DB::table('jobs')->insert($jobs);

0 个答案:

没有答案