正在删除laravel中排队的作业


Deleting queued jobs in laravel

我已经在Laravel中的队列中添加了一些作业。但是,我忘记在函数中放入$job->delete(),并且函数中出现错误。这意味着工作永远不会结束。它不断被替换到队列中,并在我的日志文件中不断出错。如何从命令行中删除它?

我正在使用beanstalkd排队。

我使用Redis而不是Beanstalkd,但两者应该相同。重新启动Redis并不能解决问题。我查看了Laravel 4.2 API文档中的RedisQueues,发现:

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

如果您查看BeanstalkedQueue,情况也是一样的。

我把它扔到dd*里面的app/routes.php中,加载了那个页面,瞧。

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

注意:每个队列重新加载页面一次。

队列已从堆栈中拉出。我希望看到一个更清洁的解决方案,但这对我来说不止一次。

*dd($var)=Laravel的die和dump函数=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

重新启动Beanstalk。在Ubuntu上:

sudo service beanstalkd restart

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

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

重要提示:此解决方案仅适用于豆茎

有两种解决方案:

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

对于Redis用户,我没有刷新,而是使用reds-cli运行以下命令:

KEYS *queue*

在持有排队作业的Redis实例上,然后删除响应中的任何密钥

DEL queues:default queues:default:reserved

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

我过去使用过这个基于php的web管理控制台。

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

在这种情况下,大多数文章似乎都告诉您使用您选择的代码+库,并循环队列作业来删除它们。

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