2015-10-15 96 views
0

您好,我在分佈式環境中使用orientdb,其中有兩個orientdb服務器實例,比如dbSrv-1和dbSrv-2。我按照以下tutorial設置分佈式數據庫,它工作正常。設置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 
+0

哪個版本? Java客戶端應自動切換到下一個可用節點。你能分享這個問題的任何日誌嗎?謝謝。 – Lvca

+0

@Lvca我添加了異常,並且我正在使用的orientdb-graphdb java客戶端是2.1.0 – Waqas

+0

您確定2個節點已啓動並正在運行嗎?你可以在啓動時附加初始日誌嗎? – Lvca

回答

0

試試這個代碼:

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): enter image description here