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

藏色散人
リリース: 2021-02-24 09:01:05
転載
5341 人が閲覧しました

次のチュートリアルコラムでは、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 で失敗しました パイプが壊れていますが、プログラムの実行結果には影響しません。切断して再接続すると、プログラムは次のエラーをスローするためです:

...} 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;}
ログイン後にコピー

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 までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!