phpcurl 請求Chunked-Encoded data 遇到的一個(gè)問題

2016-10-21 16:51 by 軒脈刃, 105 閱讀, 0 評論, 收藏編輯

最早出現(xiàn)的問題情況是提供es的部門在es的外部封裝了一個(gè)gateway做請求中轉(zhuǎn)。

當(dāng)我們轉(zhuǎn)換到gateway上之后,發(fā)現(xiàn)了問題:

有的請求可以獲取到數(shù)據(jù),有的請求獲取不到數(shù)據(jù)。

仔細(xì)分析了業(yè)務(wù)代碼,抽取了一個(gè)出問題的業(yè)務(wù)請求,這個(gè)業(yè)務(wù)請求里面包含了多次對es的請求,只有最后一個(gè)es請求拋出異常,其他都正常。

ps: 我們的業(yè)務(wù)是使用php寫的,使用了https://github.com/elastic/elasticsearch-php這個(gè)包進(jìn)行es請求的。

初步分析

當(dāng)然,我們沒有把錯(cuò)誤信息對外,首先看我們自己的日志,看到的錯(cuò)誤信息是:

No alive nodes found in your cluster at elasticsearch/elasticsearch/src/Elasticsearch/ConnectionPool/StaticNoPingConnectionPool.php:51

這個(gè)錯(cuò)誤第一反應(yīng)是是不是新的這個(gè)gateway節(jié)點(diǎn)有問題啊?但是想想這是不可能的,因?yàn)椴⒉皇撬姓埱蠖疾豢梢?,而且找了gateway部門的同事問了下,也不存在對請求單獨(dú)處理的邏輯。

那么繼續(xù)看到StaticNoPingConnectionPool.php

public function nextConnection($force = false) {
    $total = count($this->connections); while ($total--) { /** @var Connection $connection */ $connection = $this->selector->select($this->connections); if ($connection->isAlive() === true) { return $connection;
        } if ($this->readyToRevive($connection) === 
        		

網(wǎng)友評論