C# 避免ElasticSearch错误503服务器不可用:使用WaitForStatus
当我启动我的程序时,我运行ElasticSearch服务并检查是否存在索引以及是否存在任何文档,假设我只运行ES服务,我有以下两个功能:C# 避免ElasticSearch错误503服务器不可用:使用WaitForStatus,c#,
elasticsearch,nest,elasticsearch-7,C#,
elasticsearch,Nest,Elasticsearch 7,当我启动我的程序时,我运行ElasticSearch服务并检查是否存在索引以及是否存在任何文档,假设我只运行ES服务,我有以下两个功能: public ElasticClient getElasticSearchClient() { ConnectionSettings connectionSettings = new Nest.ConnectionSettings(new Uri("http://localhost:9200"))
public ElasticClient getElasticSearchClient()
{
ConnectionSettings connectionSettings = new Nest.ConnectionSettings(new Uri("http://localhost:9200"))
.DefaultIndex("myindex")
.DisableDirectStreaming();
ElasticClient client = new ElasticClient(connectionSettings);
//var health = client.Cluster.Health("myindex", a => (a.WaitForStatus(WaitForStatus.Yellow)).Timeout(50));
return client;
}
public void checkElasticsearchIndex()
{
var client = getElasticSearchClient();
var health = this.client.Cluster.Health("myindex", a => (a.WaitForStatus(WaitForStatus.Yellow)));
CountResponse count = client.Count<myobject>();
if (!client.Indices.Exists("myindex").IsValid || count.Count == 0)
{
BulkWriteAllToIndexES(client);
}
}
public ElasticClient getElasticSearchClient()
{
ConnectionSettings ConnectionSettings=新嵌套。ConnectionSettings(新Uri(“http://localhost:9200"))
.DefaultIndex(“myindex”)
.DisableDirectStreaming();
ElasticClient=新的ElasticClient(连接设置);
//var health=client.Cluster.health(“myindex”,a=>(a.WaitForStatus(WaitForStatus.Yellow)).Timeout(50));
返回客户;
}
public void checkElasticsearchIndex()
{
var client=getElasticSearchClient();
var health=this.client.Cluster.health(“myindex”,a=>(a.WaitForStatus(WaitForStatus.Yellow));
CountResponse count=client.count();
如果(!client.index.Exists(“myindex”).IsValid | | count.count==0)
{
BulkWriteAllotIndexes(客户端);
}
}
在checkElasticsearchIndex函数中
我的问题:有没有办法等到客户机/群集/节点准备就绪,而不出现任何异常?听起来像是在启动程序的同时启动Elasticsearch过程,但Elasticsearch需要比程序更长的时间才能准备就绪 如果是这样的话,您可能会对使用.NET客户端用于针对Elasticsearch的集成测试感兴趣。抽象读取Elasticsearch过程的输出,以了解它何时准备就绪,并阻塞直到发生这种情况。他们正在(计划将来将其发布给Nuget) 有。对于单个节点,它类似于
using System;
using Elastic.Managed.Configuration;
using Elastic.Managed.ConsoleWriters;
using Elastic.Managed.FileSystem;
namespace Elastic.Managed.Example
{
class Program
{
static void Main(string[] args)
{
var version = "7.5.1";
var esHome = Environment.ExpandEnvironmentVariables($@"%LOCALAPPDATA%\ElasticManaged\{version}\elasticsearch-{version}");
using (var node = new ElasticsearchNode(version, esHome))
{
node.SubscribeLines(new LineHighlightWriter());
if (!node.WaitForStarted(TimeSpan.FromMinutes(2))) throw new Exception();
// do your work here
}
}
}
}
这假设Elasticsearch 7.5.1 zip已经下载,并且存在于%LOCALAPPDATA%\ElasticManaged\7.5.1\Elasticsearch-7.5.1
。还有更复杂的问题
您可以下载、配置和运行Elasticsearch
var plugins = new ElasticsearchPlugins(ElasticsearchPlugin.RepositoryAzure, ElasticsearchPlugin.IngestAttachment);
var config = new EphemeralClusterConfiguration("7.5.1", ClusterFeatures.XPack, plugins, numberOfNodes: 1);
using (var cluster = new EphemeralCluster(config))
{
cluster.Start();
var nodes = cluster.NodesUris();
var connectionPool = new StaticConnectionPool(nodes);
var settings = new ConnectionSettings(connectionPool).EnableDebugMode();
var client = new ElasticClient(settings);
Console.Write(client.CatPlugins().DebugInformation);
}
听起来您在启动程序的同时启动Elasticsearch过程,但Elasticsearch需要比您的程序更长的时间才能准备就绪 如果是这样的话,您可能会对使用.NET客户端用于针对Elasticsearch的集成测试感兴趣。抽象读取Elasticsearch过程的输出,以了解它何时准备就绪,并阻塞直到发生这种情况。他们正在(计划将来将其发布给Nuget) 有。对于单个节点,它类似于
using System;
using Elastic.Managed.Configuration;
using Elastic.Managed.ConsoleWriters;
using Elastic.Managed.FileSystem;
namespace Elastic.Managed.Example
{
class Program
{
static void Main(string[] args)
{
var version = "7.5.1";
var esHome = Environment.ExpandEnvironmentVariables($@"%LOCALAPPDATA%\ElasticManaged\{version}\elasticsearch-{version}");
using (var node = new ElasticsearchNode(version, esHome))
{
node.SubscribeLines(new LineHighlightWriter());
if (!node.WaitForStarted(TimeSpan.FromMinutes(2))) throw new Exception();
// do your work here
}
}
}
}
这假设Elasticsearch 7.5.1 zip已经下载,并且存在于%LOCALAPPDATA%\ElasticManaged\7.5.1\Elasticsearch-7.5.1
。还有更复杂的问题
您可以下载、配置和运行Elasticsearch
var plugins = new ElasticsearchPlugins(ElasticsearchPlugin.RepositoryAzure, ElasticsearchPlugin.IngestAttachment);
var config = new EphemeralClusterConfiguration("7.5.1", ClusterFeatures.XPack, plugins, numberOfNodes: 1);
using (var cluster = new EphemeralCluster(config))
{
cluster.Start();
var nodes = cluster.NodesUris();
var connectionPool = new StaticConnectionPool(nodes);
var settings = new ConnectionSettings(connectionPool).EnableDebugMode();
var client = new ElasticClient(settings);
Console.Write(client.CatPlugins().DebugInformation);
}
不用担心,需要让他们在nuget上起床:)不用担心,需要让他们在nuget上起床:)