常駐命令隊列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中執行m

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章