我正在寻找一种在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);