9

DB 書き込みsession.executeAsync()の代わりに呼び出すことで、コードを高速化しようとしています。session.execute()

DB 接続がダウンしている可能性があるユースケースがあります。現在、execute()接続が失われた場合 (クラスター内で到達可能なホストがない場合) に、前の例では例外がスローされます。これらの例外をキャッチして、再試行するか、データを別の場所に保存することができます...

ではexecuteAsync()、このユースケースを満たす方法がないように見えます-返されたResultSetFutureオブジェクトにアクセスして結果を確認する必要があり、executeAsync()そもそも を使用する目的が無効になります...

DB 書き込みが失敗したことを他のコードに非同期的に通知する executeAsync() 呼び出しのどこかにリスナー (または類似のもの) を追加する方法はありますか?

これは適切ですか?データスタックス 1.0.2 Java 1.7.40

4

2 に答える 2

14

Guava ライブラリからResultSetFuture実装されているため、次のようなことを試すことができます。ListenableFuture

    ResultSetFuture resultSetFuture = session.executeAsync("SELECT * FROM test.t;");
    Futures.addCallback(resultSetFuture, new FutureCallback<ResultSet>() {
        @Override
        public void onSuccess(@Nullable com.datastax.driver.core.ResultSet resultSet) {
            // do nothing
        }

        @Override
        public void onFailure(Throwable throwable) {
            System.out.printf("Failed with: %s\n", throwable);
        }
    });

このアプローチは、アプリケーションをブロックしません。

于 2014-03-16T21:14:01.797 に答える