niv*_*nso 1 php curl elasticsearch guzzle
我想在我的elasticsearch php客户端和我的elasticsearch服务器之间配置一个小的超时.
我试图将一些参数传递给guzzle客户端,但似乎这不起作用.这是代码:
$params = array();
$params['hosts'] = $hosts;
$params['guzzleOptions']['connect_timeout'] = 2.0;
$params['guzzleOptions']['timeout'] = 2.0;
$this->elastica_obj = new Elasticsearch\Client($params);
Run Code Online (Sandbox Code Playgroud)
我搜索并发现问题可能发生,因为超时是在cURL层中设置的(低于guzzle)(限制与Guzzle HTTP PHP客户端的连接时间)
我想我需要以某种方式将CURLOPT_CONNECTTIMEOUT_MS参数设置为我想要的值(2000ms)但我没有看到任何好方法通过elasticsearch php客户端传递它.
有人知道怎么做吗?
从elasticsearch/elasticsearchv5.1.2 开始,您还可以使用setConnectionParams()适用于所有请求的方法
use GuzzleHttp\RequestOptions;
use Elasticsearch\ClientBuilder;
ClientBuilder::create()
->setConnectionParams([
'client' => [
RequestOptions::TIMEOUT => 10,
RequestOptions::CONNECT_TIMEOUT => 10,
],
])
->build();
Run Code Online (Sandbox Code Playgroud)
谢谢Zack,我尝试了但它不起作用.
我调试了客户端以及参数从guzzle传递到curl句柄的方式.
我找到完成它的方法是将此参数传递给Elasticsearch客户端
$params['guzzleOptions']['curl.options'][CURLOPT_CONNECTTIMEOUT] = 2.0; // this applies 2 seconds connection_timeout
Run Code Online (Sandbox Code Playgroud)
希望它有帮助:)
和合