即使你正在使用一个嗅探连接池,该连接池设置为嗅探启动/失败并启用ping
,你也可以根据每个请求选择禁用连接池嗅探和ping
这些行为。
在以下测试中,设置了一个集群,在启动时进行ping
和嗅探,但在第一个请求时禁用了嗅探,因此我们只看到ping
和响应。
现在设置集群并配置客户端,使其始终在启动时嗅探:
var audit = new Auditor(() => VirtualClusterWith
.Nodes(10)
.ClientCalls(r => r.SucceedAlways())
.Sniff(c=>c.SucceedAlways())
.Ping(c=>c.SucceedAlways())
.SniffingConnectionPool()
.Settings(s => s.SniffOnStartup())
);
现在我们禁用嗅探请求,因此即使这是第一次调用,也不希望在启动时嗅探请求。
相反,启动时的嗅探被推迟到对集群的第二次调用,该调用不会根据每个请求禁用嗅探。之后,就不会再对启动进行嗅探了:
audit = await audit.TraceCalls(
new ClientCall(r => r.DisableSniffing()) // 禁用嗅探
{
{ PingSuccess, 9200 }, // 每一次调用Ping成功
{ HealthyResponse, 9200 }
},
new ClientCall()
{
{ SniffOnStartup }, // 第二次调用时,发生了启动嗅探行为
{ SniffSuccess, 9200 },
{ PingSuccess, 9200 },
{ HealthyResponse, 9200 }
},
new ClientCall()
{
{ PingSuccess, 9201 }, // 不再发生启动时嗅探行为了
{ HealthyResponse, 9201 }
}
);
现在,我们禁用请求的ping
行为:
var audit = new Auditor(() => VirtualClusterWith
.Nodes(10)
.ClientCalls(r => r.SucceedAlways())
.Sniff(c=>c.SucceedAlways())
.SniffingConnectionPool()
.Settings(s => s.SniffOnStartup())
);
audit = await audit.TraceCall(
new ClientCall(r => r.DisablePing()) // 禁用ping
{
{ SniffOnStartup },
{ SniffSuccess, 9200 }, // 在嗅探之后不会发生ping行为
{ HealthyResponse, 9200 }
}
);
最后,让演示如何在请求上禁用嗅探和ping
:
var audit = new Auditor(() => VirtualClusterWith
.Nodes(10)
.ClientCalls(r => r.SucceedAlways())
.SniffingConnectionPool()
.Settings(s => s.SniffOnStartup())
);
audit = await audit.TraceCall(
new ClientCall(r=>r.DisableSniffing().DisablePing()) // 禁用嗅探和ping
{
{ HealthyResponse, 9200 } // 在调用之前没有发生嗅探和ping行为
}
);
发表评论
登录用户才能发表评论, 请 登 录 或者 注册