關于thinkphp-queue問題解決

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

下面由thinkphp教程欄目給大家介紹關于thinkphp-queue問題解決,希望對需要的朋友有所幫助!

使用版本:TP5.1、 thinkphp-queue 2.0

mysql超時斷線問題

隊列任務運行一段時間,出現:sqlstate[hy000]: general Error: 2006 mysql server has gone away報錯。

解決方法和分析:

配置文件database.php中配置斷線重連:

  // 是否需要斷線重連   'break_reconnect'  =>  true,   // 斷線標識字符串   'break_match_str'  => ['2006'],

配置后雖然日志中會出現另一個報錯:pdo::prepare(): send of 60 bytes failed with errno=32 Broken pipe,但并不影響程序運行結果。因為斷線重連后,程序都會拋出錯誤:

...} 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環境進行進程監護

一般情況下,可以使用supervisor監護隊列進程。配合docker使用的話,大概有幾方案:

立即學習PHP免費學習筆記(深入)”;

1.將supervisor安裝到php服務所在的容器中

2.跑一個新的容器來運行隊列任務(不用supervisor,容器本身是一個daemon)

3.直接在現有的php容器運行隊列任務(命令行使用–daemon選項)

方法一supervisor參考配置(放在/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

方法二新開一個鏡像參考配置(在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

方法三有點hack,為了不大改線上環境,最后使用方法三(在host機子操作)。

啟動: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 thinkfacadeLog;Log::init([     'single'    => 'queue',     'file_size' => 1024 * 1024 * 10,     'level'     => ['error'],]);

日志將輸出到runtime目錄的queue-cli.log文件? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

以上就是關于

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享