【问题标题】:Remote access to ArangoDB through Java Interface通过 Java 接口远程访问 ArangoDB
【发布时间】:2016-06-01 17:41:47
【问题描述】:

我开发了一个使用 ArangoDB 作为后端数据库的 Java 应用程序(Used ArangoDB Java-Driver/Interface to access ArangoDB)。

在我的 ArangoDB 和应用程序驻留在同一台机器上之前,一切都很好。

一旦我将 ArangoDB 移动到远程机器(专用服务器),我的应用程序就无法访问它:(

我在一些属性文件中提供了我的远程机器详细信息(ArangoDB 服务器),并在创建 ArangoDriver 对象时将该文件位置提供给 ArangoConfigure 构造函数。但我仍然无法访问 ArangoDB :(

我的代码的小sn-p如下:

protected static ArangoConfigure getConfiguration() {
        //ArangoConfigure configure = new ArangoConfigure();
        ArangoConfigure configure = new
ArangoConfigure("/Volumes/Official/ZLabs/arangodb.properties");
                configure.init();

        return configure;   }

    protected static ArangoDriver getArangoDriver(ArangoConfigure
configuration) {        return new ArangoDriver(configuration);     }

请在这方面帮助我。

等待您的回复。

感谢和最好的问候, - 鲯鳅

【问题讨论】:

    标签: java arangodb


    【解决方案1】:

    首先感谢@dothebart 的所有帮助。

    @dothebart,在我在这里发布之前,我已经检查了你提到的所有细节。唯一遗漏的是 HTTP 连接,感谢您指出这一点。

    实际上,下面的代码更改已经为我解决了这个问题。

    早期代码:

    ArangoConfigure configure = new ArangoConfigure("/home/arango.properties");
    configure.init();
    ArangoDriver driver = new ArangoDriver(configuration);
    

    修改后的代码:

    ArangoConfigure configure = new ArangoConfigure("/home/arango.properties");
    ArangoHost hostObj = new ArangoHost(<IP-Address>, 8529);
    configure.setArangoHost(hostObj);
    configure.setUser(<user-name>);
    configure.setPassword(<password>);
    configure.init();
    ArangoDriver driver = new ArangoDriver(configuration);
    

    再次设置主机、用户名和密码使其工作:(

    文件有所有详细信息,那我为什么要再次提供它们..我不明白。

    @dothebart 我找不到日志文件,请告诉我在哪里可以找到它。

    【讨论】:

      【解决方案2】:

      如果 Aranngodb Java 驱动程序无法打开或解析 /Volumes/Official/ZLabs/arangodb.properties,它会发出一条日志消息。

      如果 arangodb 属性看起来像这样:

      port=8529
      host=192.168.22.17
      user=root
      password=OpenSesame
      enableCURLLogger=false
      

      您启动walking up the OSI model 来调试 TCP 连接问题,以规避由于防火墙、路由等可能导致的连接问题。 一种使用常用的 telnet 命令来测试服务器的可用性:

      telnet 192.168.22.17 8529
      Trying 192.168.22.17...
      

      如果它永远存在,您很可能有防火墙将您过滤掉,您最终会得到:

      telnet: Unable to connect to remote host: Connection timed out
      

      如果它立即退出:

      telnet: Unable to connect to remote host: Connection refused
      

      似乎服务器没有应答。

      然后您可以在服务器端检查服务是否绑定了您尝试连接的端口 (8529):

      netstat -alpnt |grep 8529
      tcp        0      0 0.0.0.0:8529            0.0.0.0:*               LISTEN      19912/arangod   
      

      如果您看到它绑定127.0.0.1:8529,您将无法远程连接它,需要像这样更改 arangod.conf:

      [server]
      endpoint = tcp://0.0.0.0:8529
      

      然后重新启动 ArangoDB。然后,您应该可以看到如下内容:

      telnet 192.168.22.17 8529
      Trying 192.168.22.17...
      Connected to 192.168.22.17.
      Escape character is '^]'. <start to type now: >
      GET / HTTP/1.0
      
      <server should reply:>
      HTTP/1.1 301 Moved Permanently
      Location: /_db/_system/_admin/aardvark/index.html
      Content-Type: text/html
      Server: ArangoDB
      Connection: Close
      Content-Length: 197
      
      <html><head><title>Moved</title></head><body><h1>Moved</h1>
      <p>This page has moved to <a href="/_db/_system/_admin/aardvark/index.html">/_db/_system/_admin/aardvark/index.html</a>.
      </p></body></html>Connection closed by foreign host.
      

      【讨论】:

        【解决方案3】:

        看起来在类路径中找不到属性文件。

        日志文件的路径应该在项目的日志配置文件中配置。 例如,您的项目可能会使用 Logback (logback.xml) 或另一个 slf4j 实现。

        【讨论】:

          猜你喜欢
          • 2020-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多