【问题标题】:MongoDB Atlas "MongoSocketException Exception sending message"MongoDB Atlas“MongoSocketException 异常发送消息”
【发布时间】:2021-02-14 17:21:53
【问题描述】:

我在尝试使用 SpringBoot 将图像上传到 Atlas 数据库时遇到了这个问题。在本地 MongoDB 数据库上进行测试时,效果很好。

我的项目也很好地连接到 Atlas,因为我可以使用另一个 api 上传“logo”图像,但对于我的“Image”api,它不起作用,它会打印:

2020-11-01 18:04:17.095  WARN 27452 --- [nio-8088-exec-2] org.mongodb.driver.connection            : Got socket exception on connection [connectionId{localValue:4, serverValue:37526}] to cluster0-shard-00-02.1c6kg.mongodb.net:27017. All connections to cluster0-shard-00-02.1c6kg.mongodb.net:27017 will be closed.
2020-11-01 18:04:17.103  INFO 27452 --- [nio-8088-exec-2] org.mongodb.driver.connection            : Closed connection [connectionId{localValue:4, serverValue:37526}] to cluster0-shard-00-02.1c6kg.mongodb.net:27017 because there was a socket exception raised by this connection.
2020-11-01 18:04:17.104  INFO 27452 --- [nio-8088-exec-2] org.mongodb.driver.cluster               : No server chosen by WritableServerSelector from cluster description ClusterDescription{type=REPLICA_SET, connectionMode=MULTIPLE, serverDescriptions=[ServerDescription{address=cluster0-shard-00-00.1c6kg.mongodb.net:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=67785768, setName='atlas-d9ovwb-shard-0', canonicalAddress=cluster0-shard-00-00.1c6kg.mongodb.net:27017, hosts=[cluster0-shard-00-00.1c6kg.mongodb.net:27017, cluster0-shard-00-01.1c6kg.mongodb.net:27017, cluster0-shard-00-02.1c6kg.mongodb.net:27017], passives=[], arbiters=[], primary='cluster0-shard-00-02.1c6kg.mongodb.net:27017', tagSet=TagSet{[Tag{name='nodeType', value='ELECTABLE'}, Tag{name='provider', value='GCP'}, Tag{name='region', value='CENTRAL_US'}, Tag{name='workloadType', value='OPERATIONAL'}]}, electionId=null, setVersion=1, lastWriteDate=Sun Nov 01 18:04:13 PST 2020, lastUpdateTimeNanos=124567789557591}, ServerDescription{address=cluster0-shard-00-02.1c6kg.mongodb.net:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=cluster0-shard-00-01.1c6kg.mongodb.net:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=70453359, setName='atlas-d9ovwb-shard-0', canonicalAddress=cluster0-shard-00-01.1c6kg.mongodb.net:27017, hosts=[cluster0-shard-00-00.1c6kg.mongodb.net:27017, cluster0-shard-00-01.1c6kg.mongodb.net:27017, cluster0-shard-00-02.1c6kg.mongodb.net:27017], passives=[], arbiters=[], primary='cluster0-shard-00-02.1c6kg.mongodb.net:27017', tagSet=TagSet{[Tag{name='nodeType', value='ELECTABLE'}, Tag{name='provider', value='GCP'}, Tag{name='region', value='CENTRAL_US'}, Tag{name='workloadType', value='OPERATIONAL'}]}, electionId=null, setVersion=1, lastWriteDate=Sun Nov 01 18:04:13 PST 2020, lastUpdateTimeNanos=124567793068830}]}. Waiting for 30000 ms before timing out
2020-11-01 18:04:17.273  INFO 27452 --- [ngodb.net:27017] org.mongodb.driver.cluster               : Discovered replica set primary cluster0-shard-00-02.1c6kg.mongodb.net:27017
2020-11-01 18:04:18.497  INFO 27452 --- [nio-8088-exec-2] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:5, serverValue:41707}] to cluster0-shard-00-02.1c6kg.mongodb.net:27017
2020-11-01 18:04:19.725  WARN 27452 --- [nio-8088-exec-2] org.mongodb.driver.connection            : Got socket exception on connection [connectionId{localValue:5, serverValue:41707}] to cluster0-shard-00-02.1c6kg.mongodb.net:27017. All connections to cluster0-shard-00-02.1c6kg.mongodb.net:27017 will be closed.
2020-11-01 18:04:19.726  INFO 27452 --- [nio-8088-exec-2] org.mongodb.driver.connection            : Closed connection [connectionId{localValue:5, serverValue:41707}] to cluster0-shard-00-02.1c6kg.mongodb.net:27017 because there was a socket exception raised by this connection.

这真的是有线的,为什么我得到这个套接字异常?我还将套接字超时设置为一个很大的数字

这是我在 application.properties 文件中的 MongoDB 配置: spring.data.mongodb.uri=mongodb+srv://admin:password@cluster0.1c6kg.mongodb.net/database-name?retryWrites=true&w=majority&connectTimeoutMS=12000&socketTimeoutMS=12000&keepAlive=true

我还检查了我的依赖项,我有:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.12.7</version>
        </dependency>

这真的很令人沮丧,已经尝试了几个小时来解决这个问题。无论如何我可以在 Atlas 上配置 Cluster-Shards 吗??

如果有人知道这个问题,谢谢

【问题讨论】:

  • 我觉得问题是上传的图片太大了,因为Atlas托管的数据库,写这么大的文件(二进制内容大小> 5MB)时,时间太长,这是不允许的在 Atlas 中,那么如何配置 Atlas Sockets 相关参数将是答案,我还在寻找如何做到这一点,有人知道吗?
  • 我测试过,当我尝试做mongotemplate.insert(Object)时,当Object size大于3MB时,这个insert请求会失败并返回一个MongoDBSocketWrite Exception
  • 当我尝试从 MongoDB Campus 插入一个大文档时,它可以工作,似乎问题是因为使用 MongoTemplate 从 SpringBoot 发送大文件到外部数据库。有什么办法可以配置吗?

标签: mongodb spring-boot mongodb-atlas


【解决方案1】:

问题解决了,它是由MongoDB的Java-Driver版本引起的。 我使用 Java 11 编译我的项目,在我将我的 Java 更改为 14 后,问题解决了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多