Outils pour utilisateurs

Outils du site


devweb:laravel:queue (lu 1001 fois)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
devweb:laravel:queue [29-07-2014 21:46]
edmc73
devweb:laravel:queue [14-06-2017 23:20] (Version actuelle)
edmc73
Ligne 1: Ligne 1:
 ====== File d'attente ou queue ====== ====== File d'attente ou queue ======
  
 +La docs => https://laravel.com/docs/5.4/queues
 +
 +Installer **supervisord**
 +
 +Créer un fichier de config
 +<code>
 +[program:laravel-worker]
 +process_name=%(program_name)s_%(process_num)02d
 +command=php /var/www/app.com/artisan queue:work --sleep=3 --tries=3
 +autostart=true
 +autorestart=true
 +user=www-data
 +numprocs=8
 +redirect_stderr=true
 +stdout_logfile=/var/www/app.com/storage/logs/worker.log
 +</code>
 +
 +Les options :
 +  * sleep : temps de pause en seconde entre chaque job
 +  * tries : nombre d'essaie en échec avant de passer dans la liste failed job
 +  * timeout : temps maxi en seconde qu'un job peut durer
 +  * memory : limite en Mo de la ram utilisé par le job
 +  * delay : délai avant de passer un job échoué dans la failed job list
 +
 +**php artisan queue:work** : permet de charger laravel en RAM et d'attendre qu'un job arrive. ATTENTION si vous modifiez le code de laravel, il ne sera pas pris en compte. 
 +
 +Pour recharger laravel dans le queue:worker, 2 solutions :
 +  * avec supervisor
 +  supervisorctl restart laravel-worker:*
 +  * avec artisan
 +  php artisan queue:restart
 +
 +Pour executer un job, pour des tests, on peut lancer la commande
 +  php artisan queue:work --once
 +
 +Une alternative : **php artisan queue:listen** contrairement a queue:work qui lui ne charge laravel que la 1ere fois, queue:listen charge laravel, exécute le job et ferme laravel, et ceci à chaque job. Ca peut être bien en dev quand le code change souvent, mais a éviter en prod car ça utilise beaucoup de ressource.
 +
 +===== Commande utile pour supervisor =====
 +Supervisor a un shell
 +<code>
 +# supervisorctl 
 +supervisor> ?
 +
 +default commands (type help <topic>):
 +=====================================
 +add    clear  fg        open  quit    remove  restart   start   stop  update 
 +avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version
 +
 +supervisor> 
 +</code>
 +mais on peut l'utiliser en ligne de commande.
 +
 +Si vous ajoutez un fichier de config, les commandes suivantes montre les nouveaux worker et les activent, puis les démarrent
 +  supervisorctl reread
 +  supervisorctl update
 +  supervisorctl start laravel-worker:*
 +
 +Si vous modifiez un fichier de config (sans changer le nom du program), la commande suivante restart le worker avec la nouvelle config
 +  supervisorctl update
 +
 +Pour tout stopper
 +  supervisorctl stop all
 +ou un worker
 +  supervisorctl stop laravel-worker:*
 +Pour tout restarter
 +  supervisorctl restart all
 +ou un worker
 +  supervisorctl restart laravel-worker:*
 +  
 +===== Config laravel =====
 +Dans config/queue.php, mettez database par défaut
 +  'default' => env('QUEUE_DRIVER', 'database'),
 +Vérifiez aussi dans votre fichier .env
 +  QUEUE_DRIVER=database
 +
 +puis 
 +<code>
 +        'database' => [
 +            'driver' => 'database',
 +            'table' => 'jobs',
 +            'queue' => 'default',
 +            'retry_after' => 90,
 +        ],
 +</code>
 +Si vous mettez un nom de queue spécifique, soit vous le spécifiez dans le fichier de config
 +<code>
 +        'database' => [
 +            'driver' => 'database',
 +            'table' => 'jobs',
 +            'queue' => 'mon_nom_de_queue',
 +            'retry_after' => 90,
 +        ],
 +</code>
 +soit vous le spécifiez dans la commande artisan
 +  command=php /var/www/app.com/artisan queue:work --tries=3 --queue=mon_nom_de_queue
 +
 +Le **retry_after** est le nombre de seconde avant de relancer un job qui génère une exception
 +
 +
 +===== Les failed =====
 +
 +<code>
 +$ php artisan queue:failed
 ++----+------------+---------+--------------------------------+---------------------+
 +| ID | Connection | Queue   | Class                          | Failed At           |
 ++----+------------+---------+--------------------------------+---------------------+
 +| 3  | database   | Imports | App\Jobs\ImportSubscribersFile | 2017-06-14 23:11:54 |
 +| 2  | database   | Imports | App\Jobs\ImportSubscribersFile | 2017-06-14 23:10:16 |
 +| 1  | database   | Imports | App\Jobs\ImportSubscribersFile | 2017-06-14 23:08:46 |
 ++----+------------+---------+--------------------------------+---------------------+
 +</code>
 +
 +<code>
 +$ php artisan queue:retry 1
 +The failed job [1] has been pushed back onto the queue!
 +</code>
 +
 +<code>
 +$ php artisan queue:forget 2
 +Failed job deleted successfully!
 +</code>
 +
 +===== Vieux systeme avec Laravel 4 =====
 Tuto en anglais => http://laravel.com/docs/queues Tuto en anglais => http://laravel.com/docs/queues
  
devweb/laravel/queue.1406663173.txt.gz · Dernière modification: 29-07-2014 21:46 de edmc73