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
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
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
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!