首先說一下我的應(yīng)用場景知态。
目的是借助微信壓縮視頻捷兰,當(dāng)用戶給公眾號發(fā)送視頻后,服務(wù)器下載并保存視頻负敏,這個處理過程可以會超過5s贡茅。
微信服務(wù)器在五秒內(nèi)收不到響應(yīng)會斷掉連接,并且重新發(fā)起請求,總共重試三次顶考,如果在調(diào)試中赁还,發(fā)現(xiàn)用戶無法收到響應(yīng)的消息,可以檢查是否消息處理超時驹沿。
關(guān)于重試的消息排重艘策,有msgid的消息推薦使用msgid排重。事件類型消息推薦使用FromUserName + CreateTime 排重渊季。
------------摘自微信公眾平臺開發(fā)者
所以我的服務(wù)器會收到微信服務(wù)器發(fā)來的重復(fù)請求朋蔫,視頻也重復(fù)下載。
簡單的解決辦法
收到消息却汉,檢測msgid是否在Redis中驯妄,不存在把msgid存入Redis同時下載視頻,存在不處理合砂。
//msgid未寫入
if (!$this->redis()->get('msgid_' . $msgid)) {
$this->redis()->setex('msgid_' . $msgid, 15, $msgid);
$this->downVideo($openid);//下載視頻
}
private function redis()
{
$redis = new \Redis();
$redis->connect('127.0.0.1, '6379');
$redis->auth('yourpassword');
$redis->select(6);
return $redis;
}