SupportsReseeding
返回结果为true
的连接池可被配置成定期嗅探。除了在启动时嗅探和故障时嗅探之外,定期嗅探还在集群经常在高峰时间水平伸缩的场景中有帮助。应用程序可能拥有节点子集的健康视图,但如果不定期嗅探,它将永远无法找到作为水平扩展的而添加的节点:
var audit = new Auditor(() => VirtualClusterWith
.Nodes(10)
.MasterEligible(9202, 9203, 9204)
.ClientCalls(r => r.SucceedAlways())
.Sniff(s => s.SucceedAlways(VirtualClusterWith
.Nodes(100)
.MasterEligible(9202, 9203, 9204)
.ClientCalls(r => r.SucceedAlways())
.Sniff(ss => ss.SucceedAlways(VirtualClusterWith
.Nodes(10)
.MasterEligible(9202, 9203, 9204)
.ClientCalls(r => r.SucceedAlways())
))
))
.SniffingConnectionPool()
.Settings(s => s
.DisablePing()
.SniffOnConnectionFault(false)
.SniffOnStartup(false)
.SniffLifeSpan(TimeSpan.FromMinutes(30))
)
);
正常集群所有节点均返回正常响应:
audit = await audit.TraceCalls(
new ClientCall { { HealthyResponse, 9200 } },
new ClientCall { { HealthyResponse, 9201 } },
new ClientCall { { HealthyResponse, 9202 } },
new ClientCall { { HealthyResponse, 9203 } },
new ClientCall { { HealthyResponse, 9204 } },
new ClientCall { { HealthyResponse, 9205 } },
new ClientCall { { HealthyResponse, 9206 } },
new ClientCall { { HealthyResponse, 9207 } },
new ClientCall { { HealthyResponse, 9208 } },
new ClientCall { { HealthyResponse, 9209 } },
new ClientCall {
{ HealthyResponse, 9200 },
{ pool => pool.Nodes.Count.Should().Be(10) }
}
);
现在我们把时钟拨快31分钟。嗅探生命周期现在应该失效了,第一个调用应该执行嗅探,它会发现我们已经扩展到100个节点了!
audit.ChangeTime(d => d.AddMinutes(31));
audit = await audit.TraceCalls(
new ClientCall {
{ SniffOnStaleCluster },
{ SniffSuccess, 9202 },
{ HealthyResponse, 9201 },
{ pool => pool.Nodes.Count.Should().Be(100) }
}
);
如果我们把时钟再往前移31分钟,现在会发现我们已经缩小到10个节点了:
audit.ChangeTime(d => d.AddMinutes(31));
audit = await audit.TraceCalls(
new ClientCall {
{ SniffOnStaleCluster },
{ SniffSuccess, 9202 },
{ HealthyResponse, 9200 },
{ pool => pool.Nodes.Count.Should().Be(10) }
}
);
发表评论
登录用户才能发表评论, 请 登 录 或者 注册