1

Java datastax ドライバーを使用しています。Cluster.shutdown() を呼び出すことによって破棄されたコンテキストで datastax Cluster オブジェクトを閉じる ServletContextListener があります。問題は、shutdown() が戻るのに数分かかることです。

Cluster.shutdown() には、タイムアウト値を指定できるオーバーライドがあります。シャットダウン値を使用しないためのドキュメントが見つからないようです.1ミリ秒のタイムアウトを指定すると、クラスターはほぼ瞬時にシャットダウンします(予想どおり)。

それで、私の質問は、とにかくサーブレットがシャットダウンしているときにクラスターをシャットダウンするだけである場合、リターンを待つ必要がある理由はありますか? タイムアウトを指定することで、本質的に非同期シャットダウンを呼び出しているように見えますが、これは問題ないはずですが、メモリ リークや不安定性を導入したくありません。

私は Cassandra/datastax にかなり慣れていないので、タイムアウトの使用に関する情報がどこかに綴られている場合は、その方向に私を向けることは素晴らしいことです!

ティア、WBJ

4

1 に答える 1

1

短いタイムアウトを指定すると、メソッドはシャットダウンを開始しますが、要求された時間だけシャットダウンの完了を待ちます。そうです、短いタイムアウトは、非同期的に続行されるシャットダウン自体に干渉しません。シャットダウンがいつ完了したか (つまり、正確にすべてのリソースが適切に閉じられたとき) を知りたくない場合、タイムアウトを使用することに特別な欠点はありません (その意図を明確にするために、タイムアウトに 0 を使用することもできます)。 )。

ドライバーのバージョン 2.x がシャットダウン API をわずかに変更し、デフォルトで非同期にしますが、シャットダウンの完了時にフューチャーを返すことはしません。うまくいけば、何が起こるかがより明確になります。

于 2013-10-23T07:10:14.357 に答える