私は現在、ElasticSearch とやり取りするために NEST ElasticSearch C# ライブラリを使用しています。私のプロジェクトは、ディレクトリアシスタント情報にアクセスするための RESTful Web サービスを基本的に構築する MVC 4 WebAPI プロジェクトです。
私たちは NEST を使い始めたばかりで、ドキュメントの不足につまずいています。そこにあるものは便利ですが、非常に大きな穴がいくつかあります。現在、必要なものはすべて機能していますが、接続に最大 1 秒かかる場合があるという問題が発生しています。私たちがやりたいことは、SQL Server と対話する方法と同様に、ある種の接続プールを使用することです。
ネストを使用して接続する方法に関するドキュメントは次のとおりです。 http://mpdreamz.github.com/NEST/concepts/connecting.html
以下は、私たちのプロジェクトの関連するコード スニペットです。
public class EOCategoryProvider : IProvider
{
public DNList ExecuteQuery(Query query)
{
//Configure the elastic client and it's settings
ConnectionSettings elasticSettings = new ConnectionSettings(Config.server, Config.port).SetDefaultIndex(Config.index);
ElasticClient client = new ElasticClient(elasticSettings);
//Connect to Elastic
ConnectionStatus connectionStatus;
if (client.TryConnect(out connectionStatus))
{
// Elastic Search Code here ...
} // end if
} // end ExecuteQuery
} // end EOCategoryProvider
ドキュメントを見ると、接続プールの規定が見当たりません。私は自分自身を実装することを考えていました (たとえば、3 つまたは 4 つの ElasticClient オブジェクトを格納し、それらをラウンドロビン スタイルで選択する) が、誰かがより良い解決策を持っているかどうか疑問に思っていました。そうでない場合、手動で接続プールを実装する最善の方法について誰かアドバイスがありますか? 参考になる記事はありますか?
ありがとうございます。
更新: これは、すべてのリクエストで TryConnect を呼び出すことと、特定のネットワーク設定に関連しているようです。エラスティック ボックスと同じネットワーク上のマシンを使用すると、問題は完全に解消されました。私の開発マシン (エラスティック ボックスに対して平均 350 ミリ秒) は、時々 http 接続に失敗するようで、TryConnect で長い時間がかかりました。