Подтвердить что ты не робот

Удаление заданий в очереди в laravel

Я добавил некоторые задания в очередь в laravel. Однако я забыл поставить $job->delete() в функцию, и в моей функции также есть ошибка. Это означает, что работа никогда не заканчивается. Он продолжает входить в него и сохраняет ошибки в моем файле журнала. Как я могу удалить его из командной строки?

Я использую beanstalkf для моей очереди.

4b9b3361

Ответ 1

Перезапустите Beanstalk. На Ubuntu:

sudo service beanstalkd restart

Ответ 2

Я использую Redis вместо Beanstalkd, но это должно быть одинаковым в обоих. Перезапуск Redis не решает проблему. Я просмотрел RedisQueues в Larvel 4.2 API Docs и нашел:

public Job|null pop(string $queue = null)
  //Pop the next job off of the queue.

Это то же самое, если вы посмотрите на BeanstalkedQueue.

Я бросил его в app/routes.php внутри dd *, загрузил эту страницу и вуаля.

Route::get('/', function() {
  dd(Queue::pop());
  #return View::make('hello');
});

ПРИМЕЧАНИЕ. Перезагрузите страницу один раз для каждой очереди.

Очередь была снята со стека. Я хотел бы видеть более чистое решение, но это работало для меня не один раз.

* dd ($ var) = Laravel die и dump function = die (var_dump ($ var))

Изменить 1: Для Redis

Вышеприведенное, очевидно, не лучшее решение, поэтому лучше. Быть осторожен!

FLUSHDB - удалить все ключи выбранной БД. Эта команда никогда не сработает.

Для Redis используйте FLUSHDB. Это приведет к сбою базы данных Redis, а не базы данных Laravel. В терминале:

$ redis-cli
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> exit

Ответ 3

Я сделал команду artisan, которая очистит все задания в вашей очереди. Вы можете дополнительно указать соединение и/или канал.

https://github.com/morrislaptop/laravel-queue-clear

Ответ 4

Только так я мог это сделать, это перезагрузить компьютер. Не удалось найти способ удалить задание.

Ответ 5

Я использовал эту консоль веб-админ-центра php в прошлом.

В противном случае, я полагаю, вы обнаружите, что используете Terminal + telnet, но я не могу найти документацию для удаления через telnet (просто просмотр списка заданий в очереди).

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

Ответ 6

Вот совместимая с Laravel 5.1 , которая позволяет очистить очередь Beanstalkd. Команда принимает имя очереди как аргумент (по умолчанию -" по умолчанию"). Не забудьте зарегистрировать его в app/Console/Kernel.php

Ответ 7

Важное примечание: это решение работает только для beanstalk

Существует два решения:

1- От вашего кода PHP

Чтобы программно удалить задания, вы можете сделать это:

    //Que the job first. (YourJobProcessor is a class that has a method called fire like `fire($job,$data)`
    $res = Queue::later(5, YourJobProcessor::class, $data, 'queue_name');
    //get the job from the que that you just pushed it to
    $job = Queue::getPheanstalk()->useTube("queue_name")->peek($res);
    //get the job from the que that you just pushed it to
    $res = Queue::getPheanstalk()->useTube("queue_name")->delete($job);

Если все пойдет хорошо, задание не будет выполнено, иначе задание будет выполнено через 5 секунд

2- Из командной строки (только для Linux и Mac)

Из командной строки (в linux и mac) вы можете использовать beanstool.

Например, если вы хотите удалить 100 готовых заданий из трубки queue_name, вы можете сделать следующее:

  for i in {1..100}; do beanstool delete -t queue_name --state=ready; done