web-dev-qa-db-fra.com

Suppression des tâches en file d'attente dans laravel

J'ai ajouté quelques travaux à une file d'attente dans laravel. Cependant, j'ai oublié de mettre $job->delete() dans la fonction et il y a aussi une erreur dans ma fonction. Cela signifie que le travail ne se termine jamais. Il continue d'y entrer et continue à faire des erreurs dans mon fichier journal. Comment puis-je le supprimer de la ligne de commande?

J'utilise beanstalkf pour ma file d'attente.

17
Claire

Redémarrez Beanstalk. Sur Ubuntu:

Sudo service beanstalkd restart
26
Jerome Jaglale

J'utilise Redis au lieu de Beanstalkd mais cela devrait être le même dans les deux. Le redémarrage de Redis ne résout pas le problème. J'ai regardé RedisQueues dans le Laravel 4.2 API Docs et j'ai trouvé:

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

C'est la même chose si vous regardez BeanstalkedQueue.

Je l'ai jeté dans app/routes.php à l'intérieur de dd *, chargé cette page et le tour est joué.

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

REMARQUE: Rechargez la page une fois par file d'attente.

La file d'attente a été retirée de la pile. J'aimerais voir une solution plus propre mais cela a fonctionné pour moi plus d'une fois.

* dd ($ var) = die et fonction de vidage de Laravel = die (var_dump ($ var))

Édition 1: Pour Redis

Ce qui précède n'est évidemment pas la meilleure solution, alors voici une meilleure façon. Faites attention!

FLUSHDB - Supprime toutes les clés du DB actuellement sélectionné. Cette commande n'échoue jamais.

Pour Redis, utilisez FLUSHDB . Cela videra la base de données Redis et non la base de données de Laravel. Dans le terminal:

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

J'ai fait une commande artisanale qui effacera tous les travaux de votre file d'attente. Vous pouvez éventuellement spécifier la connexion et/ou le tuyau.

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

2
morrislaptop

Remarque importante: cette solution ne fonctionne que pour le haricot magique

Il existe deux solutions:

1- De votre PHP Code

Pour supprimer des tâches par programme, vous pouvez procéder comme suit:

    //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);

Si tout s'est bien passé, le travail ne s'exécutera pas, sinon le travail s'exécutera après 5 secondes

2- Depuis la ligne de commande (Linux et Mac uniquement)

Depuis la ligne de commande (sous linux et mac), vous pouvez utiliser beanstool .

Par exemple, si vous souhaitez supprimer 100 travaux prêts du queue_name tube, vous pouvez effectuer les opérations suivantes:

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

Voici Laravel 5.1 compatible command , qui vous permet d'effacer la file d'attente Beanstalkd. La commande prend le nom de la file d'attente comme argument ('default' par défaut). N'oubliez pas de enregistrez-le dans app/Console/Kernel.php

0
cheelahim

La seule façon de le faire était de redémarrer mon ordinateur. Impossible de trouver un moyen de supprimer un travail.

0
Claire

J'ai utilisé cette console d'administration Web basée sur php dans le passé.

Sinon, je pense que vous vous retrouverez à utiliser Terminal + telnet, bien que je ne trouve aucune documentation à supprimer via telnet (Il suffit de visualiser une liste des travaux en file d'attente).

Il semble que la plupart des articles vous disent tilisez votre code + bibliothèque de choix et bouclez autour des tâches de files d'attente pour les supprimer dans cette situation.

0
fideloper