我是新手使用astyanax连接到cassandra(1.2.8)。 我从[https://github.com/Netflix/astyanax]和cassandra下载了astyanax,来自[http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.8/apache-cassandra- 1.2.8-bin.tar.gz]。根据指令安装/构建所有内容并保留默认设置(如conf / cassandra.yaml)。现在我尝试运行示例代码[https://github.com/Netflix/astyanax/blob/master/astyanax-examples/src/main/java/com/netflix/astyanax/examples/AstCQLClient.java],并且恶心的错误一直困扰着我(在日食时显示):
引起:com.netflix.astyanax.connectionpool.exceptions.PoolTimeoutException:PoolTimeoutException:[host = 127.0.0.1(127.0.0.1):9160,latency = 5021(5021),attempts = 1]超时等待连接
当我启用cassandra调试模式时,终端显示以下内容:
DEBUG 17:06:48,968在处理消息期间发生了节俭传输错误。 org.apache.thrift.transport.TTransportException:无法读取。远程侧已关闭。试图读取4个字节,但只有0个字节。 (这通常表示服务器端存在内部错误。请检查服务器日志。) 在org.apache.thrift.transport.TTransport.readAll(TTransport.java:86) 在org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:378) 在org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:297) 在org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:204) 在org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:22) 在org.apache.cassandra.thrift.CustomTThreadPoolServer $ WorkerProcess.run(CustomTThreadPoolServer.java:199) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615) 在java.lang.Thread.run(Thread.java:724)
只是为了强调,我没有改变cassandra.yaml中的任何内容(实际上我不知道它们是什么意思);所有来自astyanax和cassandra-1.2.8的库都被导入到java项目中。 我想问题是由于当我尝试刷新帧变换时连接将关闭...我是数据库的菜鸟。我非常感谢所有的帮助!
PS。我正在等待stackoverflow。如果你需要检查任何日志(请同时给我一个目录来查找它。我是noob> _<),只是说,我会去取它。非常感谢!!
答案 0 :(得分:0)
即使这是一个老问题,我也不确定我的建议是否会帮助任何人,但我遇到了同样的错误,这就是我如何解决它。希望这将有助于另一个可怜的灵魂。
我看到同样的错误“无法读取远程端已关闭”,但我使用的是csharp,Apache.Cassandra命名空间和Thrift.dll。
以下是一个工作片段,
TSocket socket = null;
TTransport transport = null;
socket = new TSocket("localhost", 9160);
transport = new TFramedTransport(socket);
TProtocol protocol = new TBinaryProtocol(transport);
CassandraClient cassandraClient = new CassandraClient(protocol);
cassandraClient.InputProtocol.Transport.Open();
诀窍是使用cassandraClient.InputProtocol.Transport.Open();而不是transport.open()