我试图通过调用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);
}
});
这种方法不会阻止您的应用程序。