设置elasticsearch php客户端的connect_timeout

时间:2014-08-25 17:21:50

标签: 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);

我搜索并发现问题可能会发生,因为超时是在cURL层中设置的(低于guzzle) (Limit connecting time with Guzzle HTTP PHP client

我想我需要以某种方式将CURLOPT_CONNECTTIMEOUT_MS参数设置为我想要的值(2000ms),但我没有看到任何通过elasticsearch php客户端传递它的好方法。

有人知道怎么做吗?

3 个答案:

答案 0 :(得分:5)

谢谢扎克, 我尝试过但它没有用。

我调试了客户端以及参数从guzzle传递到curl句柄的方式。

我找到完成它的方法是将此参数传递给Elasticsearch客户端

$params['guzzleOptions']['curl.options'][CURLOPT_CONNECTTIMEOUT] = 2.0;  // this applies 2 seconds connection_timeout

希望它有所帮助:)

和合

答案 1 :(得分:3)

对于最新版本2.x,它以不同的方式完成。引用Zach

在ES-PHP 2.x中,现在按请求指定超时。请参阅此处的文档:https://www.elastic.co/guide/en/elasticsearch/client/php-api/2.0/_per_request_configuration.html#_curl_timeouts

$client = ClientBuilder::create()->build();

$params = [
    'index' => 'test',
    'type' => 'test',
    'id' => 1,
    'client' => [
        'timeout' => 10,        // ten second timeout
        'connect_timeout' => 10
    ]
];
$response = $client->get($params);

但是,在全球范围内无法做到这一点。关注this issue以获取更新。

答案 2 :(得分:0)

假设您的意思是Elasticsearch-PHP客户端(而不是Elastica):

guzzleOptions参数接受任何Guzzle参数,并遵循Guzzle使用的相同数组语法。所以你需要这样做:

$params = array();
$params['hosts'] = $hosts;
$params['guzzleOptions']['command.request_options']['connect_timeout'] = 2.0;
$params['guzzleOptions']['command.request_options']['timeout'] = 2.0;
$this->elastica_obj = new Elasticsearch\Client($params);

这将对通过客户端发送的所有请求应用2s超时

有一个“快捷”timeout参数应该适用于所有连接类型(Guzzle,CurlMultiConnection等)......但我现在正在查看代码,我不认为它实际上有效为Guzzle。我会打开一张票。