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