Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

688
Views
MongoSocketReadException: Alcanzó prematuramente el final de la transmisión (después de un período de inactividad)

Recibo este error en una llamada de find (controlador Java predeterminado) después de un período de inactividad. Intenté agregar un latido manual (escribiendo en una colección limitada), pero no sirvió de nada. Solo tengo el problema mientras estoy conectado a una instancia en redacción (es decir, no en un contexto local).

La versión de MongoDB es 3.2.8, el controlador más reciente (3.3), con Java 8.

Alguna idea ?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Lo encontré en alguna documentación:

Para aplicaciones de ejecución prolongada, a menudo es prudente habilitar "keepAlive" con una cantidad de milisegundos. Sin él, después de un período de tiempo, puede comenzar a ver errores de "conexión cerrada" por lo que parece no tener ningún motivo.

Compruebe si esto ayuda. Cuando se conecta a mongoDB, puede pasarle opciones de socket. Soy del fondo del nodo, usamos las siguientes opciones para mantenerlo vivo.

 server: { socketOptions: { keepAlive: 100, connectTimeoutMS: 30000 } }

¡¡Espero que esto ayude!!

over 4 years ago · Santiago Trujillo Report

0

Resuelvo este problema configurando sslEnabled en verdadero, ejemplo de código:

 @Bean public MongoClient mongoClient() { List<ServerAddress> saList = new ArrayList<>(); saList.add(new ServerAddress("cluster0-shard-00-00-75shm.gcp.mongodb.net", 27017)); saList.add(new ServerAddress("cluster0-shard-00-01-75shm.gcp.mongodb.net", 27017)); saList.add(new ServerAddress("cluster0-shard-00-02-75shm.gcp.mongodb.net", 27017)); char[] pwd = "password".toCharArray(); MongoCredential credential = MongoCredential.createCredential("username", "admin", pwd); //set sslEnabled to true here MongoClientOptions options = MongoClientOptions.builder() .readPreference(ReadPreference.primaryPreferred()) .retryWrites(true) .requiredReplicaSetName("Cluster0-shard-0") .maxConnectionIdleTime(6000) .sslEnabled(true) .build(); MongoClient mongoClient = new MongoClient(saList, credential, options); return mongoClient; }

Adición: mi jar de cliente es org.mongodb.mongodb-driver 3.6.4, el servidor es mongodb atlas M0 3.6.6 en GCP

over 4 years ago · Santiago Trujillo Report

0

Esto funcionó para mí en spring boot y mongo basado en la nube (instancias agrupadas de Atlas).

Edite application.properties así:

 spring.data.mongodb.uri = mongodb+srv://username:password@solarsystem-1tpu0.mongodb.net/dbname

Para instancias regulares de mongo (no agrupadas) use esto:

 spring.data.mongodb.uri = mongodb://username:password@solarsystem-shard-00-00-1tpu0.mongodb.net:27017,hostname2:27017/dbname?ssl=true
  • Si desea configurar otras opciones de conexión , puede encadenar múltiples parámetros usando '&'; documentación aquí: https://mongodb.github.io/mongo-java-driver/3.4/javadoc/com/mongodb/MongoClientURI.html
  • Si estaba usando otros parámetros spring.data.mongodb , debe eliminarlos todos; de lo contrario, Spring no leerá spring.data.mongodb.uri
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!