Laravel — Задача очереди вставки с пользовательским методом обработки и удалением задания.

Рассмотрим код такого типа, который помещает задачу в очередь для запуска пользовательского метода-обработчика, расположенного в том же классе:

<?php namespace Space;

class Spaceship {

public static function cruise()
{
// Throtting in 3 seconds...
Queue::later(3, '\Space\Spaceship@throttle', $coordinates, 'queue-name');
}

public static function throttle($job, $data)
{
$job->delete();
return 'ok';
}

}

Это работало нормально, прежде чем я добавил $ job-> delete (); но теперь это дает ошибку:

exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Call to a member function delete() on a non-object

В Laravel 4.2 документы нет никакого объяснения, почему с задачей push-очереди, указывающей на пользовательский метод-обработчик, вам не нужно явно удалять задачу из очереди с помощью $ job-> delete ()? Тем не менее, такая реализация работает, и когда регистрируется параметр $ job, он ложен.

0

Решение

Идти к app\config\queue.php и проверить default ключ. Если последний установлен на sync, то ожидаемое выше поведение ожидается.

sync водитель немедленно запускает вашу задачу, а это значит, Queue::later на самом деле Queue::push,

Попробуйте конвертировать ваши Queue::later в Queue::push и код будет работать без ошибок.

Что касается явного удаления задачи в очереди, то по большей части это не нужно. Однако вы должны учитывать службы очереди, которые не обеспечивают автоматическое удаление задания.

С моей стороны, AWS SQS (служба очереди сообщений) автоматически удаляет задание после его извлечения из очереди.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]