Elasticsearch.Net
和NEST
客户端虽然可以全局指定请求超时时间,但也可以覆盖每个请求。
以下示例设置了一个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.Net
和NEST
为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 }
}
);
发表评论
登录用户才能发表评论, 请 登 录 或者 注册