如何在AWS的Mesos集群外通过Java驱动访问ArangoDB API?
嘿,我来帮你搞定这个连接问题~
首先,你得明白几个关键点:Mesos的服务端点和ArangoDB驱动的配置逻辑是分开的,Mesos的认证令牌确实和ArangoDB的登录没关系,咱们一步步来解决:
1. 正确配置Java驱动的主机、端口和路径前缀
你能通过http://mymesoscluster/service/arangodb3访问ArangoDB,说明这个URL是Mesos服务代理(通常是Marathon或Mesos DNS提供的)转发到ArangoDB Coordinator节点的入口。但ArangoDB Java驱动默认会直接请求根路径的API,所以需要做两个调整:
- 主机和端口:填Mesos集群的入口地址(也就是
mymesoscluster)和对应的端口——如果访问时没写端口,默认是80;如果是HTTPS访问就是443。 - 路径前缀:必须加上
/service/arangodb3,不然驱动会直接请求http://mymesoscluster:80/_api/...,而不是代理后的路径。
修改后的代码应该是这样:
@Bean public ArangoDB arangoDB() { ArangoDB arangoDB = new ArangoDB.Builder() .host("mymesoscluster", 80) // 换成你的Mesos集群入口端口,HTTPS的话用443 .user("root") .password("somepassword") .basePath("/service/arangodb3") // 关键:添加这个路径前缀 // 如果是HTTPS访问,加上下面这行启用SSL // .useSsl(true) .build(); return arangoDB; }
2. 为什么Mesos的认证令牌没用?
你提到的Mesos Authentication HTTP API是用来访问Mesos自身的管理API(比如提交任务、查看集群节点状态)的,和ArangoDB的认证体系完全独立。ArangoDB驱动的用户名密码是直接发给ArangoDB集群的,和Mesos的身份验证无关,所以你原来的user和password配置是对的,不用改。
3. 额外的验证步骤
在跑Java服务之前,建议先用curl测试一下代理是否正常工作:
curl http://mymesoscluster/service/arangodb3/_api/version
如果能返回类似{"server":"arango","version":"3.x.x","license":"community"}的结果,说明代理是通的,驱动配置应该就能正常工作。
另外要注意:Mesos的服务代理应该会自动负载均衡到ArangoDB的多个Coordinator节点,所以你不用手动配置多个主机,用这个统一的服务端点就够了。
内容的提问来源于stack exchange,提问作者codepuppet
相关产品推荐
相关产品推荐

