0

Mongo Java ドライバー (2.8.0) を使用して Mongo インスタンスに接続しています。

mongod を再起動すると、再起動後の最初の操作 (単純な count() であっても) は常に EOFException または壊れたパイプで失敗することに気付きました。

次のMongoオプションを使用しています:

opts.autoConnectRetry = true;
opts.maxAutoConnectRetryTime = 2000L;
opts.connectTimeout = 30000;
opts.socketTimeout = 60000;

ドライバーに接続の再確立を試みるように指示する方法はありますか? 「autoReconnectRetry」がそれを行うと思っていましたが、それは接続が「発見」された後(単一の失敗した操作によって)切断された後にのみ機能します。

4

1 に答える 1

1

AutoConnectRetryオプションは、サーバーへの接続を開くときに再試行しますが、読み取り例外が発生しないことを保証するものではありません。アプリケーションで例外を処理し、必要に応じて再試行する必要があります。

ドキュメントからの宣伝文:

true の場合、ソケットを確立できない場合に備えて、ドライバーは同じサーバーへの接続を試行し続けます。再試行を継続する最大時間 (デフォルトでは 15 秒) があります。これは、操作をブロックすることで、サーバーが一時的にダウンしているときに一部の例外がスローされるのを回避するのに役立ちます。また、新しいマスターへの移行をスムーズにするのにも役立ちます (再試行時間内に新しいマスターが選択されるようにします)。このフラグを使用する場合は、次の点に注意してください。 - レプリカ セットの場合、ドライバーは、すぐに新しいマスターにフェールオーバーするのではなく、その時点で古いマスターに接続しようとします -これは、読み取り/書き込みで例外がスローされるのを防ぎません。アプリケーションで処理する必要があるソケットの操作. このフラグが false の場合でも、ドライバーには、切断された接続を自動的に再作成し、読み取り操作を再試行するメカニズムが既に備わっています。デフォルトは false です。

于 2012-08-09T07:20:36.923 に答える