首页 文章

使用Cassandra Java驱动程序播放2.x - 错误com.datastax.driver.core.Session - 创建池到xxx.xx时出错,但返回响应

提问于
浏览
1

Set up

  • Cassandra Java驱动程序:2.1.3,2.1.4,2.0.0(全部试用)

  • Cassandra集群:[cqlsh 5.0.1 | Cassandra 2.1.0 | CQL规范3.2.0 |原生协议v3]

  • 播放2.2.3

我在访问简单表时遇到上述设置问题 . 但我也得到了日志中的回复 . 我在EC2,2节点单数据中心上运行服务器 . 也尝试使用EC2 AMI但结果相同 . 此外,这是一个非常新鲜的设置,并且还没有加载服务器 .

Cassandra Configs

rpc_address : 0.0.0.0
listen_address : internal_ip
broadcast_address: public_ip
start_native_transport: true
native_transport_port: 9042

Code snippet

SocketOptions options = new SocketOptions();
        options.setConnectTimeoutMillis(10000);
        options.setReadTimeoutMillis(10000);

        cluster = Cluster.builder().addContactPoints("public_ip1","public_ip2").withPort(9042).withSocketOptions(options).withRetryPolicy(DowngradingConsistencyRetryPolicy.INSTANCE)
                .withReconnectionPolicy(new ConstantReconnectionPolicy(1000L)).build();

         Metadata metadata = cluster.getMetadata();
         System.out.printf("Connected to cluster: %s\n", 
                metadata.getClusterName());

        session = cluster.connect();

        // Use select to get the user we just entered
        ResultSet results = session.execute("SELECT * FROM redmart.user_pick_rate");
        for (Row row : results) {
            System.out.println( "user_id : " + row.getInt("user_id") + " pick_rate : " + row.getDouble("pick_rate"));
        }

根据以下异常,它总是向Java客户端中的一个节点抱怨“将池创建到/ internal_ip:9042” . 例如,如果我有node1,node2 . 在javaclient中如果我只用node1创建一个集群,它抱怨无法创建池(node2的内部ip),如果我使用节点2来创建集群,它就会抱怨无法创建池到(node1的内部ip) . 如果我指定它们总是说错误创建池到其中一个节点 . 我尝试过不同的netty版本 .

我在here中看到了类似的未解决的问题,但在我的情况下,我也得到了回复 .

任何见解都表示赞赏 .

11:59:31.791 [Cassandra Java Driver worker-0] ERROR com.datastax.driver.core.Session -     Error creating pool to /10.167.135.180:9042
com.datastax.driver.core.TransportException: [/10.167.135.180:9042] Cannot connect

at com.datastax.driver.core.Connection.<init>(Connection.java:104) ~     
at com.datastax.driver.core.SingleConnectionPool.<init>(SingleConnectionPool.java:76) ~[cassandra-driver-core-2.1.4.jar:na]
at   com.datastax.driver.core.HostConnectionPool.newInstance(HostConnectionPool.java:35) ~[cassandra-driver-core-2.1.4.jar:na]
at com.datastax.driver.core.SessionManager.replacePool(SessionManager.java:271) ~[cassandra-driver-core-2.1.4.jar:na]
at com.datastax.driver.core.SessionManager.access$400(SessionManager.java:40) ~[cassandra-driver-core-2.1.4.jar:na]
at com.datastax.driver.core.SessionManager$3.call(SessionManager.java:308) [cassandra-driver-core-2.1.4.jar:na]
at com.datastax.driver.core.SessionManager$3.call(SessionManager.java:300) [cassandra-driver-core-2.1.4.jar:na]
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_71]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_71]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_71]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_71]
Caused by: com.datastax.shaded.netty.channel.ConnectTimeoutException: connection timed out: /10.167.135.180:9042
at com.datastax.shaded.netty.channel.socket.nio.NioClientBoss.processConnectTimeout(NioClientBoss.java:137) ~[cassandra-driver-core-2.1.4.jar:na]
at com.datastax.shaded.netty.channel.socket.nio.NioClientBoss.process(NioClientBoss.java:83) ~[cassandra-driver-core-2.1.4.jar:na]
at com.datastax.shaded.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) ~[cassandra-driver-core-2.1.4.jar:na]
at com.datastax.shaded.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42) ~[cassandra-driver-core-2.1.4.jar:na]
at com.datastax.shaded.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) ~[cassandra-driver-core-2.1.4.jar:na]
at com.datastax.shaded.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) ~[cassandra-driver-core-2.1.4.jar:na]
... 3 common frames omitted
user_id : 6555 pick_rate : 0.4494318731691269
user_id : 1000 pick_rate : 7.132659816872288E-4

1 回答

  • 0

    尝试使用 rpc_address : 0.0.0.0 之外的其他东西 .

    在我的头脑中,这是对本地客户的阻止 . 尝试使用私有IP(不确定它是私有IP而不是公共IP,但你可以测试它们) .

相关问题