java - VoltDB createConnection 超时

标签 java networking connection timeout voltdb

下面是一个简单的代码片段,展示了如何连接到 VoltDB 服务器。

ClientConfig clientConfig = new ClientConfig();
Client client = ClientFactory.createClient(clientConfig);
String server = "192.168.43.32";
client.createConnection(server);

根据我的实验,如果服务器关闭或无法从网络层连接,大约需要 75 秒才能获得响应。

SEVERE: Failed to connect to 192.168.43.32, in 75,359 ms
java.net.ConnectException: Operation timed out
    at sun.nio.ch.Net.connect0(Native Method)
    at sun.nio.ch.Net.connect(Net.java:458)
    at sun.nio.ch.Net.connect(Net.java:450)
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:648)
    at java.nio.channels.SocketChannel.open(SocketChannel.java:189)
    at org.voltdb.client.ConnectionUtil.getAuthenticatedConnection(ConnectionUtil.java:154)
    at org.voltdb.client.ConnectionUtil.getAuthenticatedConnection(ConnectionUtil.java:142)
    at org.voltdb.client.ConnectionUtil.getAuthenticatedConnection(ConnectionUtil.java:134)
    at org.voltdb.client.Distributer.createConnectionWithHashedCredentials(Distributer.java:878)
    at org.voltdb.client.ClientImpl.createConnectionWithHashedCredentials(ClientImpl.java:189)
    at org.voltdb.client.ClientImpl.createConnection(ClientImpl.java:682)
    at src.java.tutorial.voltdb.integration.ConnectionTest.main(ConnectionTest.java:27)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

有没有办法设置超时时间,让应用程序不需要等待这么长时间。正常情况下连接成功只需要几十毫秒,所以我想如果在1000毫秒内无法建立连接,那肯定是有问题了。

我尝试过以下设置

clientConfig.setConnectionResponseTimeout(1000);

在这种情况下,它根本没有任何效果。所以我猜它不是为了这个目的。

最佳答案

通常,当数据库关闭并且您的客户端尝试连接时,它将立即收到连接拒绝异常,例如:

Exception in thread "main" java.net.ConnectException: Connection refused
at sun.nio.ch.Net.connect0(Native Method)
at sun.nio.ch.Net.connect(Net.java:364)
at sun.nio.ch.Net.connect(Net.java:356)
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:623)
at java.nio.channels.SocketChannel.open(SocketChannel.java:184)
at org.voltdb.client.ConnectionUtil.getAuthenticatedConnection(ConnectionUtil.java:165)
at org.voltdb.client.ConnectionUtil.getAuthenticatedConnection(ConnectionUtil.java:153)
at org.voltdb.client.ConnectionUtil.getAuthenticatedConnection(ConnectionUtil.java:145)
at org.voltdb.client.Distributer.createConnectionWithHashedCredentials(Distributer.java:890)
at org.voltdb.client.ClientImpl.createConnectionWithHashedCredentials(ClientImpl.java:191)
at org.voltdb.client.ClientImpl.createConnection(ClientImpl.java:684)
at benchmark.Benchmark.<init>(Benchmark.java:17)
at benchmark.Benchmark.main(Benchmark.java:78)

通常,如果防火墙阻止客户端接收任何类型的响应,或者可能有其他原因,则可能会出现“java.net.ConnectException:连接超时”。首先要检查的可能是您是否有任何防火墙或网络设置阻止访问端口 21212(默认的 VoltDB 数据库连接端口)。

客户端配置 setConnectionResponseTimeout()设置用于在给定毫秒数内未收到过程调用或 ping 的响应时关闭实时连接,但不用于创建新连接。

关于java - VoltDB createConnection 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30520286/

相关文章:

java - App进程网络,setProcessDefaultNetwork/bindProcessToNetwork Android L中的Android API

java - 使用java连接mysql时出现错误

mysql - Cygwin 上 Vagrant 中的 Puphpet MySQL Workbench 连接

SSL Ldap 连接 (ldaps)

java - AIR(Flex)与 Java

java - 如果连接被数据库关闭,我是否需要手动关闭它?

networking - 通过特定接口(interface)的 ssh 客户端

java - 双向链表空指针异常

java - Android编程如何将小部件转换或转换为java字符串

python - 在 Paramiko 中选择路由实例