我可以成功地连接一个独立集群到我的Play框架(2.7)应用程序(与ReactiveMongo 0.17.1),我可以连接Mongo指南针到我的副本集(创建在MongoDb Atlas),但我有很大的问题连接我的MongoDb Atlas副本集到我的Play框架应用程序。这应该是在application.conf
文件中使用connection string
的情况;例如
mongodb.uri = <connectionString>
事实上,ReactiveMongo文档将其描述为:
mongodb.uri = "mongodb+srv://${ATLAS_USERNAME}:${ATLAS_PASSWORD}@cluster0-p8ccg.mongodb.net/test?retryWrites=true&w=majority"
-
三个变量
${ATLAS_USERNAME}
,${ATLAS_PASSWORD}
&test
(默认数据库名)
和MongoDb Atlas文档(当登录时)描述connection string
是这样制定的:
mongodb+srv://<username>:<password>@cluster0.pwe0y.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
-
三个变量
<username>
,<password>
&myFirstDatabase
(默认数据库名)
所以除了地址的一些变量差异(我使用了Atlas中的地址,因为它与我的详细信息不同)
反复出现的错误如下:
[error] r.c.a.MongoDBSystem - [Supervisor-1/Connection-2] Fails to send a isMaster request to cluster0-shard-00-01.pwe0y.mongodb.net:27017 (channel #ac1cfe76) javax.net.ssl.SSLException: SSLEngine closed already at reactivemongo.io.netty.handler.ssl.SslHandler.wrap(...)(Unknown Source)
注意事项:
- 我有node.js v12.14.1
- 用户被授予适当的权限
- 选项参数也已经过
URL encoded
测试 - 我的ip地址在
IP Access List
(在蒙古地图集)
对于连接,您应该像这样传递mongodb.uri
:
mongodb.uri = "mongodb+srv://${ATLAS_USERNAME}:${ATLAS_PASSWORD}@cluster0-p8ccg.mongodb.net"
不要使用完整的连接字符串URL作为连接。
如果Atlas没有在DNS SRV中设置authSource=admin
,请确保在连接URI中添加?authSource=admin
。
还需要注意的是,0.17已经发布两年多了,不会得到修复。