这是一个用于测试连接到cassandra的简单程序:
package testJava.db.cassandra;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class ConnectionTester {
public static void main (String[] args) {
Session session = null;
try {
Cluster cluster = Cluster.builder().addContactPoint("192.168.1.2").build();
session = cluster.connect("myspace");
System.out.println(session.getState());
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}
}
当我打电话时,我得到:
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /192.168.1.2:9042 (com.datastax.driver.core.TransportException: [/192.168.1.2:9042] Cannot connect))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:199)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:80)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1199)
at com.datastax.driver.core.Cluster.init(Cluster.java:154)
at com.datastax.driver.core.Cluster.connect(Cluster.java:230)
at com.datastax.driver.core.Cluster.connect(Cluster.java:263)
at testJava.db.cassandra.ConnectionTester.main(ConnectionTester.java:11)
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:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
当我将localhost
更改为192.168.1.2
时,每件事情都有效。
另外ipconfig
windows命令返回:
Ethernet adapter Local Area Connection:
Description . . . . . . . . . . . . . : Realtek PCIe GBE Family Controller
Physical Address. . . . . . . . . . . : 40-61-86-7C-4B-0F
DHCP Enabled. . . . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . . . : Yes
IPv4-address. . . . . . . . . . . . . : 192.168.1.2(Preffered)
Subnet Mask . . . . . . . . . . . . . : 255.255.255.0
Default gateway . . . . . . . . . . . : 192.168.1.1
DHCP-Server . . . . . . . . . . . . . : 192.168.1.1
DNS-Servers . . . . . . . . . . . . . : 192.168.1.1
很明显,我的IP地址是192.168.1.2
重要
是的,我可以与localhost
或127.0.0.1
保持联系,但我知道为什么我上面的例子不起作用。此外,当我指定192.168.1.2
地址并在虚拟机上运行应用程序时,它也不起作用,即使ping命令有效。
答案 0 :(得分:2)
这些是cassandra.yaml中可配置的3个地址。
监听地址 - 这是其他Cassandra节点将用于与此节点通信的IP地址。如果您在云端,那么内部IP地址就可以提高性能。
RPC地址 - 这是您的客户端连接到的地址,可能是您要配置为可从客户端计算机访问的IP的地址。
广播地址 - 如果您使用多个数据中心或AWS区域,则并非所有节点都可以通过内部IP相互访问。您可以为不同数据中心中的节点指定外部IP地址,但仍可以相互通信。在许多情况下,您根本不需要此设置,它将默认为您的收听地址。