常驻命令队列mysql连接超时的处理办法

1,常驻命令队列长时间没访问再次有消息消费时,会报错

PDO::prepare(): send of 131 bytes failed with errno=32 Broken pipe

这是因为mysql服务端自动断开socket,mysql的socket timeout超过8小时(默认)会自动断开已建立的tcp连接

但由于是常驻命令,程序认为connection连接还存在,进行mysql操作就会报错。

2,两种解决办法(laravel)

优化BaseModel

<?php

use Illuminate\Database\Eloquent\Model as Eloquent;

class BaseModel extends Eloquent
{
    protected static $lastConnectTime = null;

    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);

        if (!is_null(self::$lastConnectTime)) {
            //4小时重连
            if ((time() - $lastConnectTime) > 14400) {
                self::getConnection()->reconnect();
            }
        } else {
                self::$lastConnectTime = time();           
        }
    }
}

重写 Illuminate\Database\DetectsLostConnections中的causedByLostConnection方法

Illuminate\Database\Connection中执行mysql操作的方法run的过程

run方法首先检查了是否失去连接,但由于是常驻队列的连接,所以认为connection还在

接着,try catch执行与数据库的交互,出现意外错误的话调用handleQueryException

handleQueryException调用tryAgainIfCausedByLostConnection

tryAgainIfCausedByLostConnection方法通过causedByLostConnection来判断失去连接从而进行重连并重新获取mysql操作结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux中,常驻进程(也称为守护进程)是指在后台运行并保持运行的进程。常驻进程通常用于维护系统的稳定性和可用性,例如网络服务、系统监控等。常驻进程在系统启动时启动,并在系统关闭时终止。 常驻进程可以通过多种方式实现,其中一种常见的方式是使用init.d脚本。init.d脚本是一种用于管理系统服务的脚本,可以在系统启动时自动启动常驻进程,并在系统关闭时自动终止。通过init.d脚本,可以方便地管理常驻进程的启动、停止和重启。 要查看当前系统中的进程信息,可以使用ps命令。ps命令的常用选项包括: - ps -a:显示当前终端的所有进程信息 - ps -u:以用户的格式显示进程信息 - ps -x:显示后台进程运行的参数 例如,使用ps -aux命令可以显示当前系统中所有进程的详细信息,包括进程号、CPU占用率、内存占用率等。\[2\] 要查看特定进程的详细信息,可以使用ps -ef命令结合grep命令进行过滤。例如,使用ps -ef | grep sshd命令可以查看所有与sshd相关的进程信息。\[3\] 如果需要终止进程,可以使用kill命令。kill命令可以向指定的进程发送信号,以请求其终止。可以使用进程号或进程名来指定要终止的进程。另外,killall命令可以终止所有具有指定名称的进程。 总结起来,Linux中的常驻进程是在后台运行并保持运行的进程,可以通过init.d脚本启动和管理。可以使用ps命令查看进程信息,使用kill命令终止进程。 #### 引用[.reference_title] - *1* [【Linux 系统】关于守护进程](https://blog.csdn.net/liuhuoxingkong/article/details/114207231)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Linux 进程管理(重点)](https://blog.csdn.net/sxycylq/article/details/128719670)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值