删除laravel中的排队作业

时间:2013-12-10 15:32:58

标签: php laravel beanstalkd

我已将一些作业添加到laravel中的队列中。但是,我忘了将$job->delete()放在函数中,我的函数也有错误。这意味着工作永无止境。它不断进入它并在我的日志文件中保持错误。如何从命令行中删除它?

我正在使用beanstalkf进行排队。

8 个答案:

答案 0 :(得分:25)

我使用的是Redis而不是Beanstalkd,但两者都应该相同。重新启动Redis无法解决问题。我查看了Laravel 4.2 API Docs中的RedisQueues并找到了:

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's 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

答案 1 :(得分:25)

重启Beanstalk。在Ubuntu上:

sudo service beanstalkd restart

答案 2 :(得分:2)

我做了一个工匠命令,它将清除队列中的所有作业。您可以选择指定连接和/或管道。

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

答案 3 :(得分:1)

重要提示:此解决方案仅适用于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

例如,如果要从queue_name管中删除100个就绪作业,可以执行以下操作:

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

答案 4 :(得分:0)

我唯一能做的就是重新启动计算机。找不到删除作业的方法。

答案 5 :(得分:0)

我过去曾使用this php-based web admin console

否则,我相信您会发现自己使用终端+ telnet,但我找不到任何通过telnet删除的文档(只是查看队列中的作业列表)。

似乎大多数文章都会告诉您use your code+library of choice and loop around queues jobs在这种情况下删除它们。

答案 6 :(得分:0)

这是Laravel 5.1兼容command,它允许您清除Beanstalkd队列。该命令将队列名称作为参数('默认为'默认情况下)。不要忘记在app / Console / Kernel.php中注册它

答案 7 :(得分:0)

对于Redis用户,我使用redis-cli而不是进行刷新:

KEYS *queue*

在拥有排队作业的Redis实例上, 然后删除响应中的所有键

DEL queues:default queues:default:reserved