ホームページ  >  記事  >  PHPフレームワーク  >  thinkphp-queue の問題解決について

thinkphp-queue の問題解決について

藏色散人
藏色散人転載
2021-02-23 15:13:295419ブラウズ

次のチュートリアルコラムでは、thinkphp-queue の問題を解決する方法を紹介します。必要としている友達のお役に立てれば幸いです! 使用バージョン: TP5.1、thinkphp-queue 2.0

mysql タイムアウト切断の問題

キュー タスクは次のように実行されます。しばらくすると、次のメッセージが表示されます: SQLSTATE[HY000]: 一般エラー: 2006 MySQL サーバーが消えました。 解決策と分析:

構成ファイル

database.php

切断と再接続の構成:

  // 是否需要断线重连
  'break_reconnect'  =>  true,
  // 断线标识字符串
  'break_match_str'  => ['2006'],

構成後、別の構成がログに表示されますが、エラーが報告されます: PDO::prepare(): 60 バイトの送信が errno=32 で失敗しました パイプが壊れていますが、プログラムの実行結果には影響しません。切断して再接続すると、プログラムは次のエラーをスローするためです: <pre class="brush:php;toolbar:false">...} catch (\PDOException $e) {  if ($this-&gt;isBreak($e)) {  return $this-&gt;close()-&gt;query($sql, $bind, $master, $pdo);  }  throw new PDOException($e, $this-&gt;config, $this-&gt;getLastsql());} catch (\Throwable $e) {  if ($this-&gt;isBreak($e)) {  return $this-&gt;close()-&gt;query($sql, $bind, $master, $pdo);  }  throw $e;} catch (\Exception $e) {  if ($this-&gt;isBreak($e)) {  return $this-&gt;close()-&gt;query($sql, $bind, $master, $pdo);   }  throw $e;}</pre>

Docker 環境でプロセスを監視する方法

通常の状況では、スーパーバイザを使用して次のことを行うことができます。キュープロセスを監視します。 docker で使用する場合、おそらくいくつかのオプションがあります: 1. PHP サービスが配置されているコンテナにスーパーバイザをインストールします

2. 新しいコンテナを実行してキュー タスクを実行します (スーパーバイザなし、コンテナー自体はデーモンです)

3. 既存の PHP コンテナーでキュー タスクを直接実行します (コマンド ラインで -daemon オプションを使用します)

方法 1 スーパーバイザーの参照設定 ( /etc/supervisor/ conf.d、ファイルの名前は {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

方法 2 新しいミラー参照構成を開きます (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

方法 3 は少しハック的ですが、オンライン環境を大きく変えないようにするため、最終的に方法 3 を使用します (ホスト マシン上で動作する)。

起動:

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

再起動: docker exec -i php7 php /path/to/think queue:restart (再起動後、キュープロセスが消えていることがわかります)、再度開始します

キュープロセスの表示: ps -aux | grep queue

##ログ調整

何らかの理由でプログラムが失敗する場合があり、大量のログが生成されます。ログを調整するのが最善です。一人で出てください。設定ファイルの先頭に追加します

config/queue.php:
use think\facade\Log;Log::init([
    'single'    => 'queue',
    'file_size' => 1024 * 1024 * 10,
    'level'     => ['error'],]);

ログは # の

queue-cli.log ファイル#に出力されます## runtime ディレクトリ。##

以上がthinkphp-queue の問題解決についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。