我想在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客户端传递它的好方法。
有人知道怎么做吗?
答案 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。我会打开一张票。