我正在尝试使用 Java 驱动器在 Cassandra 中设置写入超时。 SocketOptions 允许我设置读取和连接超时,但不能设置写入超时。 有谁知道在不更改 cassandra.yaml 的情况下执行此操作的方法?
谢谢
阿尔托伯
最佳答案
名称具有误导性,但SocketOptions.getReadTimeoutMillis()适用于驱动程序对 cassandra 的所有请求。您可以将其视为客户端级别的超时。如果在该时间段内 cassandra 节点未返回响应,将引发 OperationTimeoutException
并尝试另一个节点。有关何时向客户端引发异常的更多详细信息,请参阅上面的 javadoc 链接。通常,您会希望此超时大于 cassandra.yaml 中的超时,这就是默认值为 12 秒的原因。
如果您想在客户端有效地管理超时,您可以通过使用 executeAsync
以及 上的定时
一段时间后放弃请求,即:get
在每个查询的基础上进行控制>ResultSetFuture
ResultSet result = session.executeAsync("your query").get(300, TimeUnit.MILLISECONDS);
如果请求没有在 300 毫秒内完成,这将抛出一个 TimeoutException
。
关于java - Cassandra - 使用 Java API 设置写入超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33171087/