我试图通过调用session.executeAsync()而不是session.execute()来加快数据库代码的写入速度。

在某些情况下,数据库连接可能会断开,当前,当连接断开时,以前的execute()会引发异常(集群中没有主机可访问)。我们可以捕获这些异常,然后在其他地方重试或保存数据,等等。

使用executeAsync()似乎没有任何方法可以满足该用例-需要访问返回的ResultSetFuture对象以检查结果,这将首先破坏使用executeAsync()的目的...

是否有任何方法可以在executeAsync()调用的任何位置添加监听器(或类似方法),以异步通知其他代码数据库写入失败?

这相关吗?
Datastax 1.0.2
Java 1.7.40

最佳答案

您可以尝试这样的操作,因为ResultSetFuture实现了Guava库中的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);
        }
    });

这种方法不会阻止您的应用程序。

09-05 06:32