J'utilise Laravel Queues et j'utilise IronMQ pour cela. Mais j'ai un peu de confusion sur la façon dont ce processus.

J'ai défini ma connexion par défaut dans queue.php as 'default' => 'iron' et également défini les paramètres du fer dans le même fichier.

Maintenant j'utilise

 $this->dispatch(new createEvents($data, $user));

Tandis que la classe createEvents est une classe de travail créée comme expliqué dans le didacticiel Laravel. Maintenant, lorsque le code suivant est exécuté

$this->dispatch(new createEvents($data, $user));

Il crée avec succès une file d'attente dans mon compte ironmQ sous projet.

Maintenant, voici ma confusion commence. J'ai mis une tâche en file d'attente dans cette file d'attente, mais comment vais-je maintenant exécuter cette file d'attente? Comment exécuter la tâche mise en file d'attente? Dois-je créer du code supplémentaire pour cela ou dois-je faire des réglages pour cela. Veuillez guider

3
Awais Qarni 31 déc. 2015 à 12:04

3 réponses

Meilleure réponse

Vous n'avez pas besoin d'aller sur votre serveur et d'exécuter cette commande à la main, vous devez avoir un processus qui continuera à s'exécuter et effectuer ces tâches.

Je recommanderais "superviseur" http://supervisord.org/

Ce programme sert à lancer un script et à le maintenir en cours d'exécution, même s'il échoue, il le relancera (jusqu'à un certain nombre d'échecs bien sûr)

Après l'avoir installé, vous devriez probablement créer ce fichier de tâches de superviseur:

[program:queue]
command=php artisan queue:listen --tries=3 --env=your_environment
directory=/path/to/laravel
stdout_logfile=/path/to/laravel/app/storage/logs/supervisord.log
redirect_stderr=true
autostart=true
autorestart=true
3
Tzook Bar Noy 7 janv. 2016 à 09:36

Vous pouvez faire php artisan queue:listen cela démarrera toutes les files d'attente répertoriées ou si vous spécifiez le nom de la file d'attente php artisan queue:listen queue_name

N'oubliez pas d'exécuter php artisan queue:failed-table. Cela créera une table failed_jobs dans votre base de données.

Donc, si quelque chose ne va pas lors de l'exécution de la file d'attente, la file d'attente a échoué dans la base de données.

Si vous souhaitez que la file d'attente ayant échoué soit insérée dans la base de données, ajoutez ceci lors de l'exécution de listen:

php artisan queue:listen connection-name --tries=3

Pour exécuter la file d'attente ayant échoué php artisan queue:retry all

J'espère que je réponds à votre question.

1
ssuhat 31 déc. 2015 à 09:22

Une fois que votre travail est dans la file d'attente, et selon votre question, vous avez deux options simples:

  1. Exécutez un ou plusieurs écouteurs de file d'attente sur les mêmes serveurs / différents (l'utilisation de supervisor est recommandée dans la documentation Laravel, voir exemple de configuration)

  2. Exécuter le travailleur de file d'attente manuellement ou automatiquement, régulièrement (crontab)

    file d'attente artisanale php: fer à repasser

Cette commande récupérera un travail de la file d'attente et le traitera. Vous le relancez - il en récupère un de plus, et ainsi de suite.

Si vous ne faites pas de traitement supplémentaire et que votre pilote de file d'attente n'est pas «synchronisé», votre travail ne verra jamais le jour.

Mon conseil - lancez manuellement les travailleurs de file d'attente sur votre machine de développement / test et utilisez Supervisor sur le serveur de production.

Si votre projet est petit et qu'il ne nécessite pas une grande évolutivité, vous voudrez peut-être simplement passer au pilote de «synchronisation» (les travaux seront traités immédiatement). Il n'est pas nécessaire de rendre l'infrastructure plus compliquée, à moins qu'il y ait une réelle nécessité!

0
Denis Mysenko 10 janv. 2016 à 03:56