创建节点
Elasticsearch.Net
或者NEST
中,可以通过传入Uri参数来实例化节点,如下:
var node = new Node(new Uri("http://localhost:9200"));
node.Uri.Should().NotBeNull();
node.Uri.Port.Should().Be(9200);
默认情况下,实例化的节点既是master候选节点也是数据节点:
node.MasterEligible.Should().BeTrue();
node.HoldsData.Should().BeTrue();
构建节点路径
有时如果Elasticsearch的节点是一个代理路径,那么你可能需要传递带有路径的参数来创建节点,如下:
var node = new Node(new Uri("http://test.example/elasticsearch"));
node.Uri.Port.Should().Be(80);
node.Uri.AbsolutePath.Should().Be("/elasticsearch/");
在Elasticsearch.Net
和NEST
中,强制要求路径以正斜杠(/
)结束,以便以后可以安全地组合完整的路径,比如:
var combinedPath = new Uri(node.Uri, "index/type/_search");
combinedPath.AbsolutePath.Should().Be("/elasticsearch/index/type/_search");
Node
实例的CreatePath()
方法的作用就是将路径组合在一起:
combinedPath = node.CreatePath("index/type/_search");
combinedPath.AbsolutePath.Should().Be("/elasticsearch/index/type/_search");
标记节点
var node = new Node(new Uri("http://localhost:9200"));
node.FailedAttempts.Should().Be(0);
node.IsAlive.Should().BeTrue();
每当一个节点被标记为挂掉
(dead
)状态时,尝试次数应该增加,并且日期时间参数应该被暴露出来,如下:
for(var i = 0; i<10;i++)
{
var deadUntil = DateTime.Now.AddMinutes(1);
node.MarkDead(deadUntil);
node.FailedAttempts.Should().Be(i + 1);
node.IsAlive.Should().BeFalse();
node.DeadUntil.Should().Be(deadUntil);
}
然而,当标记一个节点为存活
状态时,应该重置DeadUntil
属性,并将FailedAttempts
重置为0,如下:
node.MarkAlive();
node.FailedAttempts.Should().Be(0);
node.DeadUntil.Should().Be(default(DateTime));
node.IsAlive.Should().BeTrue();
节点相等性
如果节点具有相同的端点,则认为它们是相等的,而不管其他关联的元数据是什么,如:
var node = new Node(new Uri("http://localhost:9200")) { MasterEligible = false };
var nodeAsMaster = new Node(new Uri("http://localhost:9200")) { MasterEligible = true };
(node == nodeAsMaster).Should().BeTrue();
(node != nodeAsMaster).Should().BeFalse();
var uri = new Uri("http://localhost:9200");
(node == uri).Should().BeTrue();
var differentUri = new Uri("http://localhost:9201");
(node != differentUri).Should().BeTrue();
node.Should().Be(nodeAsMaster);
发表评论
登录用户才能发表评论, 请 登 录 或者 注册