关于thinkphp-queue问题解决

发布时间 - 2021-02-23 00:00:00    点击率:

下面由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使用的话,大概有几方案:

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

日志将输出到runtime目录的queue-cli.log文件                                                    


# thinkphp  # php  # mysql  # Error  # pdo  # errno  # docker  # database  # 报错  # 重启  # 配置文件  # 是一个  # 会有  # 放在  # 给大家  # 线上  # 然后再  # 新开 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  新三国志曹操传主线渭水交兵攻略  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  网站制作报价单模板图片,小松挖机官方网站报价?  Swift中循环语句中的转移语句 break 和 continue  北京网站制作的公司有哪些,北京白云观官方网站?  如何挑选最适合建站的高性能VPS主机?  如何在万网自助建站中设置域名及备案?  教学论文网站制作软件有哪些,写论文用什么软件 ?  深圳网站制作培训,深圳哪些招聘网站比较好?  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel如何处理和验证JSON类型的数据库字段  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  如何快速登录WAP自助建站平台?  海南网站制作公司有哪些,海口网是哪家的?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  🚀拖拽式CMS建站能否实现高效与个性化并存?  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  Android 常见的图片加载框架详细介绍  如何用免费手机建站系统零基础打造专业网站?  如何在IIS7中新建站点?详细步骤解析  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Windows Hello人脸识别突然无法使用  如何正确下载安装西数主机建站助手?  Laravel如何使用Blade组件和插槽?(Component代码示例)  简单实现Android验证码  如何在 React 中条件性地遍历数组并渲染元素  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel如何处理异常和错误?(Handler示例)  Laravel如何集成Inertia.js与Vue/React?(安装配置)  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  如何在服务器上三步完成建站并提升流量?  如何用y主机助手快速搭建网站?  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  如何彻底卸载建站之星软件?  C#如何调用原生C++ COM对象详解  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Python函数文档自动校验_规范解析【教程】  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  晋江文学城电脑版官网 晋江文学城网页版直接进入  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】