Maison >cadre php >PensezPHP >À propos de la résolution des problèmes de thinkphp-queue

À propos de la résolution des problèmes de thinkphp-queue

藏色散人
藏色散人avant
2021-02-23 15:13:295683parcourir
Vous trouverez ci-dessous

Thinkphp La colonne du didacticiel présentera la résolution de problèmes Thinkphp-Queue, j'espère que cela sera utile aux amis dans le besoin !

Versions utilisées : TP5.1, thinkphp-queue 2.0

Problème de déconnexion du délai d'attente mysql

La tâche de file d'attente s'exécute pendant un certain temps, apparaît : SQLSTATE[HY000] : Erreur générale : 2006 Le serveur MySQL a disparu.

Solution et analyse :

Configurer la déconnexion et la reconnexion dans le fichier de configuration

: database.php

  // 是否需要断线重连
  'break_reconnect'  =>  true,
  // 断线标识字符串
  'break_match_str'  => ['2006'],
Après la configuration, une autre erreur apparaîtra dans le log : PDO:: préparer () : l'envoi de 60 octets a échoué avec errno=32 Tuyau cassé, mais cela n'affecte pas les résultats d'exécution du programme. Parce qu'après la déconnexion et la reconnexion, le programme générera une erreur :

...} catch (\PDOException $e) {
 if ($this->isBreak($e)) {
 return $this->close()->query($sql, $bind, $master, $pdo);
 }

 throw new PDOException($e, $this->config, $this->getLastsql());} catch (\Throwable $e) {
 if ($this->isBreak($e)) {
 return $this->close()->query($sql, $bind, $master, $pdo);
 }

 throw $e;} catch (\Exception $e) {
 if ($this->isBreak($e)) {
 return $this->close()->query($sql, $bind, $master, $pdo);
  }
 throw $e;}

Comment surveiller le processus dans l'environnement Docker

Dans des circonstances normales, vous pouvez utiliser le superviseur pour surveiller le processus de file d’attente. S'il est utilisé avec Docker, il existe probablement plusieurs options :

1. Installer le superviseur dans le conteneur où se trouve le service php

2. Exécuter un nouveau conteneur pour exécuter les tâches de file d'attente (pas de superviseur, conteneur C'est un démon en soi)

3. Exécutez la tâche de file d'attente directement dans le conteneur php existant (utilisez l'option –daemon sur la ligne de commande)

Configuration de référence du superviseur de la méthode 1 (mise en /etc/supervisor/ conf.d, le fichier s'appelle {file-name}.conf) :

[program:my_queue_name]process_name=%(program_name)s_%(process_num)02d
command=php /path/to/think queue:work --queue=your-queue-name --sleep=3 --daemon
autostart=trueautorestart=truenumprocs=1user=root
stopasgroup=truekillasgroup=trueredirect_stderr=truestdout_logfile=/path/to/your-queue.log
Méthode 2 : Ouvrir une nouvelle configuration de référence miroir (ajouter des services dans docker-compose.yml) :

php-queue:
 container_name: queue
 image: docker_php-fpm73
 restart: always
 command: php path/to/think queue:work --sleep=3
 volumes:
 - ../project:/var/www/html - ./conf/php:/usr/local/etc/php - ./conf/php/conf.d:/usr/local/etc/php/conf.d - ./conf/supervisor:/etc/supervisor/conf.d
 networks:
 - mysql - nginx
La troisième méthode est un peu hacky. Afin de ne pas trop modifier l'environnement en ligne, la troisième méthode est finalement utilisée (opérant sur la machine hôte).

Démarrer :

docker exec -i php7 php /path/to/think queue:work --queue=my-queue-name --sleep=3 --daemon

Redémarrer :

(Après le redémarrage, le processus de file d'attente a disparu), puis démarrer docker exec -i php7 php /path/to/think queue:restart

pour afficher le processus de file d'attente : ps - aux | grep queue

Ajustement du journal

Parfois, une erreur de programme se produit pour une raison quelconque et un grand nombre de journaux sont générés. les journaux et séparez-les. Ajoutez au début du fichier de configuration

 : config/queue.php

use think\facade\Log;Log::init([
    'single'    => 'queue',
    'file_size' => 1024 * 1024 * 10,
    'level'     => ['error'],]);
Le journal sera sorti dans le

fichier runtime dans le répertoire queue-cli.log

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer