设置连接超时的elasticsearch php客户端

jgzswidk  于 2023-02-07  发布在  PHP
关注(0)|答案(5)|浏览(247)

我想配置一个小的超时之间我的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客户端传递它.
有人知道怎么做吗?

0qx6xfy6

0qx6xfy61#

elasticsearch/elasticsearch v5.1.2开始,您还可以使用适用于所有请求的setConnectionParams()方法

use GuzzleHttp\RequestOptions;
use Elasticsearch\ClientBuilder;

ClientBuilder::create()
    ->setConnectionParams([
        'client' => [
            RequestOptions::TIMEOUT => 10,
            RequestOptions::CONNECT_TIMEOUT => 10,
        ],
    ])
    ->build();
deyfvvtc

deyfvvtc2#

谢谢扎克,我试过了,但它不工作。
我调试了客户端以及参数从gouzzle传递到curl句柄的方式。
我发现完成它的方法是将此参数传递给Elasticsearch客户端

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

希望它是有帮助的:)
尼夫

o4hqfura

o4hqfura3#

对于最新的2.x版本,它是以不同的方式完成的。
在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获取更新。

wr98u20j

wr98u20j4#

假设您指的是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。

vwhgwdsa

vwhgwdsa5#

在我的php弹性版本中,解决方案是

retun ClientBuilder::create()
      ->setHttpClientOptions([
            'connect_timeout' => 10,//seconds
        ])
       ->build();

也许有人会有用=)

相关问题