【发布时间】:2015-10-16 12:56:35
【问题描述】:
我正在尝试使用 Java 驱动器在 Cassandra 中设置写入超时。 SocketOptions 允许我设置读取和连接超时,但不能设置写入超时。 有谁知道在不更改 cassandra.yaml 的情况下如何做到这一点?
谢谢
阿尔托伯
【问题讨论】:
标签: java cassandra key-value-store
我正在尝试使用 Java 驱动器在 Cassandra 中设置写入超时。 SocketOptions 允许我设置读取和连接超时,但不能设置写入超时。 有谁知道在不更改 cassandra.yaml 的情况下如何做到这一点?
谢谢
阿尔托伯
【问题讨论】:
标签: java cassandra key-value-store
名称具有误导性,但SocketOptions.getReadTimeoutMillis() 适用于从驱动程序到 cassandra 的所有请求。您可以将其视为客户端级别的超时。如果 cassandra 节点在这段时间内没有返回响应,则将引发 OperationTimeoutException 并尝试另一个节点。有关何时向客户端引发异常的更多详细信息,请参阅上面的 javadoc 链接。通常,您会希望此超时大于 cassandra.yaml 中的超时,这就是为什么 12 秒是默认值的原因。
如果您想在客户端级别有效地管理超时,您可以通过使用executeAsync 以及ResultSetFuture 上的定时get 在一段时间后放弃请求来控制每个查询时间,即:
ResultSet result = session.executeAsync("your query").get(300, TimeUnit.MILLISECONDS);
如果请求未在 300 毫秒内完成,这将抛出 TimeoutException。
【讨论】: