请求超时

886 发布于: 2021-03-25 读完约需 2 分钟

Elasticsearch.NetNEST客户端虽然可以全局指定请求超时时间,但也可以覆盖每个请求。

以下示例设置了一个10个节点的集群,全局超时时间为20秒。每个节点上的调用需要10秒。因此,在最大请求超时到达之前,只能在2个节点上尝试这个调用请求。

var audit = new Auditor(() => VirtualClusterWith
    .Nodes(10)
    .ClientCalls(r => r.FailAlways().Takes(TimeSpan.FromSeconds(10)))
    .ClientCalls(r => r.OnPort(9209).SucceedAlways())
    .StaticConnectionPool()
    .Settings(s => s.DisablePing().RequestTimeout(TimeSpan.FromSeconds(20)))
);

audit = await audit.TraceCalls(
    new ClientCall {
        { BadResponse, 9200 },
        { BadResponse, 9201 },
        { MaxTimeoutReached }
    },

    new ClientCall(r => r.RequestTimeout(TimeSpan.FromSeconds(80)))
    {
        { BadResponse, 9203 },
        { BadResponse, 9204 },
        { BadResponse, 9205 },
        { BadResponse, 9206 },
        { BadResponse, 9207 },
        { BadResponse, 9208 },
        { HealthyResponse, 9209 },
    }
);

连接超时(Connect timeouts)

对于单个连接,可以根据每个请求覆盖连接超时时间。

虽然底层的用于桌面CLR的WebRequest和用于Core CLR的HttpClient两个库很难区分连接超时时间和重试超时时间,但Elasticsearch.NetNEST为ping请求使用一个单独的配置值,以允许对ping进行独立配置。

以下示例设置了一个10个节点的集群,全局超时时间为20秒。每个节点上的调用需要10秒。因此,在最大请求超时时间到达之前,只能在2个节点上尝试这个调用。

var audit = new Auditor(() => VirtualClusterWith
    .Nodes(10)
    .Ping(p => p.SucceedAlways().Takes(TimeSpan.FromSeconds(20)))
    .ClientCalls(r => r.SucceedAlways())
    .StaticConnectionPool()
    .Settings(s => s.RequestTimeout(TimeSpan.FromSeconds(10)).PingTimeout(TimeSpan.FromSeconds(10)))
);

audit = await audit.TraceCalls(
    new ClientCall {
        { PingFailure, 9200 },
        { MaxTimeoutReached }
    },
    new ClientCall(r => r.PingTimeout(TimeSpan.FromSeconds(2)))
    {
        { PingFailure, 9202 },
        { PingFailure, 9203 },
        { PingFailure, 9204 },
        { PingFailure, 9205 },
        { PingFailure, 9206 },
        { MaxTimeoutReached }
    }
);

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

发表评论

登录用户才能发表评论, 请 登 录 或者 注册