带有DataStax Java驱动程序的Cassandra 1000并发请求的NoHostAvailableException

时间:2014-07-18 09:45:42

标签: java cassandra datastax-java-driver

设置:

-2节点Cassandra 2.0.7.31集群
-replicas = 1
- 具有默认配置
- 使用DataStax java驱动程序1.0

活动 使用QueyBuilder类进行简单的插入查询

结果

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.181.13.239 ([/10.181.13.239] Unexpected exception triggered))
            at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:64)
            at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:214)
            at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:169)
            at com.jpmc.es.rtm.storage.impl.EventExtract.main(EventExtract.java:36)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.181.13.239 ([/10.181.13.239] Unexpected exception triggered))
            at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:98)
            at com.datastax.driver.core.RequestHandler$1.run(RequestHandler.java:165)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)

2 个答案:

答案 0 :(得分:1)

问题是,在我的最后,我创建了一个线程一个连接模型。这是非常同步的。但是Datstax驱动程序异步工作(我猜它使用netty)并在单个连接上接受多个请求。所以在我的情况下,我为每个请求一个会话,猜猜是什么?我已经离开了开放式连接b / w Driver和Cassandra。服务器被阻塞,驱动程序也是如此。只需让Driver管理其池就可以解决问题。

默认情况下,Datastax java驱动程序保持最小连接量以处理一定数量的同时请求 规范说驱动程序在每个连接最多128个请求时有一个处理限制。当我们驱动程序发现超过128个请求即将到来时它只打开连接。所以Driver正在精心管理连接池。[http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/PoolingOptions.html]此链接很有用

答案 1 :(得分:0)

转到您的cassandra.yaml文件。它将出现在您的cassandra安装的 conf 文件夹中。

对于 listen_address ,请提供cassandra服务器的IP地址。例如

listen_address: 10.181.13.239

然后重新启动cassandra服务器。另外,请注意未检查本机传输的端口。应该有一个像

这样的条目
native_transport_port: 9042