【问题标题】:Cassandra - Set write timeout with Java APICassandra - 使用 Java API 设置写入超时
【发布时间】:2015-10-16 12:56:35
【问题描述】:

我正在尝试使用 Java 驱动器在 Cassandra 中设置写入超时。 SocketOptions 允许我设置读取和连接超时,但不能设置写入超时。 有谁知道在不更改 cassandra.yaml 的情况下如何做到这一点?

谢谢

阿尔托伯

【问题讨论】:

    标签: java cassandra key-value-store


    【解决方案1】:

    名称具有误导性,但SocketOptions.getReadTimeoutMillis() 适用于从驱动程序到 cassandra 的所有请求。您可以将其视为客户端级别的超时。如果 cassandra 节点在这段时间内没有返回响应,则将引发 OperationTimeoutException 并尝试另一个节点。有关何时向客户端引发异常的更多详细信息,请参阅上面的 javadoc 链接。通常,您会希望此超时大于 cassandra.yaml 中的超时,这就是为什么 12 秒是默认值的原因。

    如果您想在客户端级别有效地管理超时,您可以通过使用executeAsync 以及ResultSetFuture 上的定时get 在一段时间后放弃请求来控制每个查询时间,即:

    ResultSet result = session.executeAsync("your query").get(300, TimeUnit.MILLISECONDS);
    

    如果请求未在 300 毫秒内完成,这将抛出 TimeoutException

    【讨论】:

    • 非常感谢您的回答。但是为什么在 Cassandra yaml 中可以设置连接、读取和写入超时,这如何反映在 Java API 中?在 SocketOptions 中,您只有两个与超时有关的变量(连接和读取),那么 cassandra.yaml 的默认写入超时在哪里结束?我的意思是 yaml 中有三个不同的值,而 SocketOptions 中只有两个。
    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 2017-07-29
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多