Java Astyanax不考虑已配置的套接字超时

Java Astyanax不考虑已配置的套接字超时,java,cassandra,timeout,astyanax,Java,Cassandra,Timeout,Astyanax,这是我的设置: 4节点Cassandra 1.2.19 阿斯蒂亚纳克斯1.56.49 我设置的配置如下 AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder() .forCluster(service.getClusterName()) .forKeyspace(service.getKeySpaceName()) .withAstyanaxConfiguration(new Ast

这是我的设置:

  • 4节点Cassandra 1.2.19
  • 阿斯蒂亚纳克斯1.56.49
我设置的配置如下

AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder()
    .forCluster(service.getClusterName())
    .forKeyspace(service.getKeySpaceName())
    .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
         .setDiscoveryType(NodeDiscoveryType.NONE)
         .setCqlVersion("3.0.0")
         .setDefaultReadConsistencyLevel(consistencyLevel.getAstyanaxValue())
         .setDefaultWriteConsistencyLevel(consistencyLevel.getAstyanaxValue())
    )
    .withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("b2bConnectionPool")
         .setPort(service.getPort())
         .setMaxConnsPerHost(5)
         .setSeeds(StringUtils.join(hosts, ","))
         // increase default timeout for heavy operations (milliseconds)
         .setSocketTimeout(15000)
         .setSSLConnectionContext(sslContext)
         .setAuthenticationCredentials(credentials)
    )
    .withConnectionPoolMonitor(new CountingConnectionPoolMonitor())
    .buildKeyspace(ThriftFamilyFactory.getInstance());

异常消息显示“latency=10001”,我认为这应该是配置为15000毫秒的套接字超时,但显然不是。如何在astyanax中增加查询操作的超时时间?

我相信您不会遇到套接字超时,而是rpc超时,我认为这无法通过astyanax控制。在堆栈跟踪中,封装在
OperationTimeoutException
中的异常是
TimedOutException
,当rpc超时发生时(默认为10秒)会引发该异常。在套接字超时的情况下,将抛出
SocketTimeoutException

尝试使用cqlsh执行查询,您将收到一条在rpc_超时内请求未完成的
消息

/conf/cassandra.yaml中尝试设置:

read_request_timeout_in_ms: 20000
rpc_timeout_in_ms: 20000

重新启动服务器并再次尝试执行查询。

我在尝试查询具有较大数据的节点时遇到类似的超时异常。我在cassandra.yaml中修改了这4个值,它解决了所有超时错误

协调器应等待读取操作完成的时间 读取请求超时时间单位:15000

协调员应等待seq或index扫描完成的时间 范围\u请求\u超时\u(毫秒):30000

协调器应等待写入完成的时间 写入请求超时(单位:30000)

协调器应等待计数器写入完成的时间 计数器写入请求超时时间单位:15000


注意:您需要在集群中的所有节点中执行此操作,还需要在所有节点中重新启动Cassandra。

我无法用cqlsh重现问题,但我可以用一个小java程序重现查询。我将尝试在答案中提到的配置更改,并在之后给出反馈。增加超时时间(请参阅答案)可以解决问题。谢谢您的答案。我试试看。谢谢你的回答。我试试看。
read_request_timeout_in_ms: 20000
rpc_timeout_in_ms: 20000