等待Elasticsearch启动并运行



我有一个C#WebAPI项目,我正在使用NEST连接到本地Elasticsearch数据库。WebAPI和Elasticsearch作为两个独立的Windows服务运行。我注意到的一个问题是,ES服务必须首先启动,否则WebAPI可能无法尝试初始化一个非可用数据库。

通过在Windows Service选项中执行依赖关系来部分解决该问题,因此Windows将首先启动ES,然后是WebAPI。问题并没有完全消失,因为ES可能需要很长时间才真正准备好,并且WebAPI服务可能无论如何都会失败。

我可以在Nest库上设置任何选项/超时/重试,只是在向数据库发出第一个请求之前等待?我需要去DIY并编码自己的重试循环吗?

没有内置的解决方案,但是您可能可以使用带有重试政策的Polly之类的东西来克服您的问题。

Policy
    .Handle<YourNESTExceptionHere>()
    .WaitAndRetryForever(retryAttempt => TimeSpan.FromSeconds(1));
    .Execute(() =>
    {
        // code that raises the exception
    });

这将不断尝试运行代码,在每次尝试之间等待1秒钟,直到完成而不会引起例外。显然,您可以将重试之间的时间更改为有意义的情况。从本质上讲,这将围绕您的Elasticsearch群集的问题围绕吞咽异常而无法立即可用,然后重试直到结束。

Polly提供的其他政策也可以使用。例如,您可能需要使用断路器,因此,如果服务或此类问题出现问题,它最终会辞职并停止进一步尝试,从而阻止其工作。您应该通过Polly Readme并了解您的不同选择。长而简短的是,您只需要某种方法来捕获异常和重试。

最新更新