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中执行m