繁体   English   中英

设置OrientDB的连接重试限制

[英]Setting connection retry limit of orientdb

您好,我在分布式环境中使用orientdb,该环境中有两个说dbSrv-1和dbSrv-2的orientdb服务器实例。 我已经按照以下教程设置了分布式数据库,并且工作正常。

但是我面临的问题是当节点关闭并且Java客户端尝试连接到该特定节点时,在这种情况下,客户端似乎陷入了连接重试的无限循环中。 我已经尝试通过命令行设置orientdb全局设置,如下所示:

java -Dnetwork.retry=1

也尝试像这样在运行时设置它

OGlobalConfiguration.NETWORK_SOCKET_RETRY.setValue(1);

但似乎没有任何效果。 以下是打开数据库连接的代码:

db = new ODatabaseDocumentTx("remote:localhost/mydb").open("admin", "admin");

Java异常跟踪如下:

Oct 15, 2015 8:03:48 PM com.orientechnologies.common.log.OLogManager log
SEVERE: Can not open database with url localhost:2424/mydb
com.orientechnologies.common.io.OIOException: Cannot open a connection to remote server: localhost:2424/mydb
        at com.orientechnologies.orient.client.remote.OStorageRemote.getAvailableNetwork(OStorageRemote.java:2114)
        at com.orientechnologies.orient.client.remote.OStorageRemote.openRemoteDatabase(OStorageRemote.java:1841)
        at com.orientechnologies.orient.client.remote.OStorageRemote.open(OStorageRemote.java:222)
        at com.orientechnologies.orient.client.remote.OStorageRemoteThread.open(OStorageRemoteThread.java:89)
        at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.open(ODatabaseDocumentTx.java:249)
        at com.orientechnologies.orient.core.db.OPartitionedDatabasePool$DatabaseDocumentTxPolled.internalOpen(OPartitionedDatabasePool.java:140)
        at com.orientechnologies.orient.core.db.OPartitionedDatabasePool.openDatabase(OPartitionedDatabasePool.java:343)
        at com.orientechnologies.orient.core.db.OPartitionedDatabasePool.acquire(OPartitionedDatabasePool.java:313)
        at com.worldhubcom.cc.mydb.db.DatabaseHelper.getDatabase(DatabaseHelper.java:45)
        at com.worldhubcom.cc.mydb.db.SubscriberDao.save(SubscriberDao.java:35)
        at com.worldhubcom.cc.mydb.authen.ServiceAuthenticate.main(ServiceAuthenticate.java:24)
Caused by: com.orientechnologies.common.io.OIOException: Error on connecting to localhost:2424/mydb
        at com.orientechnologies.orient.client.remote.ORemoteConnectionManager.createNetworkConnection(ORemoteConnectionManager.java:246)
        at com.orientechnologies.orient.client.remote.ORemoteConnectionManager$1.createNewResource(ORemoteConnectionManager.java:80)
        at com.orientechnologies.orient.client.remote.ORemoteConnectionManager$1.createNewResource(ORemoteConnectionManager.java:77)
        at com.orientechnologies.common.concur.resource.OResourcePool.getResource(OResourcePool.java:94)
        at com.orientechnologies.orient.client.remote.ORemoteConnectionManager.acquire(ORemoteConnectionManager.java:101)
        at com.orientechnologies.orient.client.remote.OStorageRemote.getAvailableNetwork(OStorageRemote.java:2103)
        ... 10 more
Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at com.orientechnologies.orient.enterprise.channel.binary.OChannelBinaryAsynchClient.<init>(OChannelBinaryAsynchClient.java:83)
        at com.orientechnologies.orient.client.remote.ORemoteConnectionManager.createNetworkConnection(ORemoteConnectionManager.java:233)
        ... 15 more

试试这个代码:

public static void main(String[] args) {
    OrientGraphFactory factory = new OrientGraphFactory("remote:localhost/test", "admin", "admin");
        OrientGraphNoTx graph = factory.getNoTx();
        OrientInsert.testInsertion(graph);
        graph.shutdown();
        System.out.println("");
        System.out.println("End main");

    }

    public static class OrientInsert {

        public static void testInsertion(OrientGraphNoTx graph) {
            System.out.println(new Date());
            int count  = 1000;

            //create class 1
            OClass clVertice1;
            OrientVertex vVertice1;

            clVertice1 = graph.createVertexType("CLASS1", "V");
            clVertice1.createProperty("prop1", OType.STRING);
            clVertice1.createProperty("prop2", OType.STRING);
            clVertice1.createProperty("prop3", OType.STRING);


            //create class 2
            OClass clVertice2;
            OrientVertex vVertice2;

            clVertice2 = graph.createVertexType("CLASS2", "V");
            clVertice2.createProperty("prop1", OType.STRING);
            clVertice2.createProperty("prop2", OType.STRING);
            clVertice2.createProperty("prop3", OType.STRING);


            for (int i = 0; i < count; ++i) {
                System.out.println("");
                System.out.println("i :"+i+" -------------------" );
                //....class 1
                vVertice1 = graph.addVertex("class:CLASS1");
                vVertice1.setProperties("prop1", Integer.toString(i));
                vVertice1.setProperties("prop2", "22"); 
                vVertice1.setProperties("prop3", "3333"); 

                for (int j = 0; j < count; ++j) {
                    System.out.print("");
                    System.out.print(j+" ");
                    //...class 2
                    vVertice2 = graph.addVertex("class:CLASS2");
                    vVertice2.setProperties("prop1", Integer.toString(i + j / 1000));
                    vVertice2.setProperties("prop2", "22"); 
                    vVertice2.setProperties("prop3", "3333"); 

                    //edge                  
                    graph.addEdge(null, vVertice1, vVertice2, "v1v2");

                }
            }
        }

}

结果是这样的(我只选择了2个顶点,极限为100 E): 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM