如何将迭代器发送到Laravel队列作业

时间:2018-12-07 11:31:48

标签: php laravel-5

尝试将100K记录的数组有效负载发送到Laravel作业(Horizo​​n和Redis)时,会引发内存问题:

Allowed memory size of 536870912 bytes exhausted (tried to allocate 77598720 bytes)

内存设置为512MB。

我使用的代码是

CreateSmsBroadcast::dispatch($user, $smsBroadcast, iterator_to_array($contacts),
 $requestData)->onQueue('create-sms-broadcast');

传递有效负载contacts (iterator)时,

CreateSmsBroadcast::dispatch($user, $smsBroadcast, $contacts, $requestData)
->onQueue('create-sms-broadcast');

然后出现以下问题:

    // vendor/laravel/framework/src/Illuminate/Queue/Queue.php
    protected function createObjectPayload($job)
    {
        return [
            'displayName' => $this->getDisplayName($job),
            'job' => 'Illuminate\Queue\CallQueuedHandler@call',
            'maxTries' => $job->tries ?? null,
            'timeout' => $job->timeout ?? null,
            'timeoutAt' => $this->getJobExpiration($job),
            'data' => [
                'commandName' => get_class($job),
                'command' => serialize(clone $job), // line of error
            ],
        ];
    }

Serialization of 'Generator' is not allowed

我不想增加内存。因此,建议我如何解决上述问题?

0 个答案:

没有答案