Maison > cadre php > PensezPHP > le corps du texte

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

藏色散人
Libérer: 2021-02-24 09:01:05
avant
5438 Les gens l'ont consulté
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'],
Copier après la connexion
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;}
Copier après la connexion

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
Copier après la connexion
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
Copier après la connexion
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'],]);
Copier après la connexion
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!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal