Laravel les files d'attente ne fonctionne pas
Je suis à l'aide de laravel files d'attente pour les commentaires sur le facebook de la poste. Lorsque j'ai jamais recevoir des données à partir de facebook webhook, basé sur le reçu de détails, je suis
commentaires sur le post. Pour gérer 100 réponses à la fois à partir de facebook webhook je suis à l'aide de laravel files d'attente, de sorte qu'il peut exécuter un par un.
J'ai utilisé le processus étape par étape, comme mentionné dans https://scotch.io/tutorials/why-laravel-queues-are-awesome
public function webhooks(Request $request)
{
$data = file_get_contents('php://input');
Log::info("Request Cycle with Queues Begins");
$job = (new webhookQueue($data)->delay(10);
$this->dispatch($job);
Log::info("Request Cycle with Queues Ends");
}
et ce est mon travail de la structure de la classe
class webhookQueue extends Job implements ShouldQueue
{
utilisation InteractsWithQueue, SerializesModels;
private $data;
public function __construct($data)
{
$this->data = $data;
}
public function handle()
{
//handling the data here
}
}
Je suis frapper webhooks fonction de() en continu, tous les emplois sont de travail simultanément, mais pas dans la file d'attente, aucun des emplois sont à stocker dans des emplois de table, j'ai donné le retard mais c'est aussi ne fonctionne pas, veuillez quelqu'un m'aider, j'ai essayé hier, mais pas de résultat.
Et ceci est mon journal dans laravel.journal
[2017-02-08 14:18:42] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:44] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:47] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:47] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:47] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:47] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:55] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:18:55] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:18:55] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:18:59] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:00] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:00] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:00] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:01] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:01] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:01] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:01] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:01] local.INFO: Request Cycle with Queues Ends
OriginalL'auteur Punabaka Abhinav | 2017-02-09
Vous devez vous connecter pour publier un commentaire.
pour l'utilisation de la file d'attente vous si le travail :
.env fichier, vous devez changer queue_driver de synchronisation de base de données,
afin de l'ouvrir .env et assurer le suivi
après cela, vous devez créer une file d'attente de table dans votre base de données de l'artisanat de commande :
et enfin, vous devez exécuter votre file d'attente avec
php artisan queue:listen
ouphp artisan queue:work
j'ai la solution, je n'ai pas changer queue_drive de base de données, merci pour la réponse.
Hey, la commande doit être
php artisan queue:listen
pasphp artisan:listen
j'ai corrigé la faute de frappe question ... désolé pour ça. @TipuZaynSultan
Il est intéressant, je l'avais mis à
database
et a dû revenir àsync
pour faire ce travail. Merci pour le bon conseil!OriginalL'auteur Mahdi Youseftabar
J'ai eu le même problème, si vous utilisez laravel 5.7, l'utilisation de ce .fichier env
après clear cache de configuration comme ceci
OriginalL'auteur Haydar ŞAHİN
Mise à jour pour Laravel 5.7:
Dans
.env
, ensembleQUEUE_CONNECTION=database
alors qui a distribué des emplois aller pour le pilote de base de données.Alors:
OriginalL'auteur Jon McClung
Je vois que vous avez déjà une File d'attente de table.
Essayez d'exécuter
php artisan queue:listen --tries=3
ouphp artisan queue:work
etc.File d'attente de travail est pour l'exécution d'une seule Tâche par commande. Donc si il y a 20 emplois dans le tableau, vous pourriez avoir à exécuter la file d'attente de travail de 20 fois. C'est pourquoi vous pouvez exécuter
queue:listen
de commande. Mais il mange beaucoup de CPU.Dans le serveur, vous pouvez exécuter votre file d'attente de l'écouter avec max 3 essais en arrière-plan.
SSH à votre serveur dans le Terminal /Invite de commandes. Puis
CD
dans votre répertoire de projet où l'artisan fichier de vie. Exécutez cette commande:nohup php artisan queue:listen --tries=3 > /dev/null 2>&1 &
Dans ce cas, les emplois seront automatiquement transformés en arrière-plan. Vous avez juste à envoyer le travail. Et je recommande l'utilisation de l'échec des emplois de la table. Si vous utilisez un arrière-plan de la file d'attente listner.
Espère que cette aide.
OriginalL'auteur TipuZaynSultan
Accepté la réponse a été un problème pour moi, mais j'ai aussi de la plaie sur cette question pour les 2 autres problèmes similaires que j'ai résolu, et peut-être aider d'autres personnes qui se retrouvent ici.
Autre problème 1: création d'emplois (constructeur) fonctionne, mais l'emploi gestionnaire n'a pas de feu jamais.
Autre problème 2: création d'emplois (constructeur) fonctionne, mais l'emploi gestionnaire n'a pas de feu parfois.
DB::beginTransaction
.En supposant que je voulez le travail d'incendie même lors d'une transaction, je peux le faire:
MAIS NE PAS le faire à moins que vous voulez à feu de votre emploi et de la force de la restauration. Ma situation est unique du fait que mon travail envoie des e-mails sur des erreurs FATALES, je tiens à feu parce que j'ai une erreur de briser le processus de toute façon (rollback va arriver et est imprévue due à l'erreur non interceptée).
Voici une situation où vous n'auriez pas envie de le faire:
Vous devez structurer votre envoi à arriver APRÈS la restauration ou de commettre.
Je n'ai pas ce luxe pour mon travail parce qu'il se passe quand je ne peux pas prédire (erreur FATALE). Mais si vous avez le contrôle sur elle, comme en sachant que votre paiement est réussie, expédition après que vous avez commis, ou de sortie tous les niveaux de transactions!
Je ne suis pas sûr du comportement de déclenchement d'un emploi alors que dans la transaction, et puis reculer ou de s'engager. Il pourrait être contourné si il ne fonctionne pas correctement par l'ajout d'un retard, mais qui semble peu fiable (deviner à combien de temps d'attente), sauf si elle a un retard important.
OriginalL'auteur amurrell
Pour les futurs lecteurs de questions , si les files d'attente étaient de travail avant, mais pas plus , juste essayer de supprimer tout le contenu de la table jobs dans la base de données , qui a fonctionné pour moi .
OriginalL'auteur ADEL NAMANI