Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

228
Visualizações
¿Hay alguna manera de leer un InputStream de forma asíncrona con Reactor o transformarlo en bytes?

Estoy tratando de cargar un archivo en S3, pero JVM dice que tengo un método de bloqueo de subprocesos llamados en fragmentos de código donde los subprocesos no deben bloquearse al llamar a file.readAllBytes(), entonces, ¿hay alguna manera de hacerlo? hacer el método asíncrono con Flux o Mono? o alguna otra forma de solucionar ese problema?

 private Mono<Boolean> uploadFile(InputStream file, String bucket, String name) { try { return uploadAdapter.uploadObject(bucket,name,file.readAllBytes()); } catch (IOException e) { return Mono.just(false); } } @Override public Mono<Boolean> uploadObject(String bucketName, String objectKey, byte[] fileContent) { return Mono.fromFuture( s3AsyncClient.putObject(configurePutObject(bucketName, objectKey), AsyncRequestBody.fromBytes(fileContent))) .map(response -> response.sdkHttpResponse().isSuccessful()); }
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Dado que InputStream es una API síncrona, tiene 2 opciones, y eso es cierto para cualquier otra API síncrona:

  1. Para cambiar a otra API. No es broma, esta puede ser una buena y posible solución para muchos problemas. Los conceptos reactivos y asíncronos en general son muy comunes y para la mayoría de las necesidades, existe una biblioteca asíncrona alternativa que hará lo mismo. En tu caso, puedes usar java.nio2 , o funciones de la biblioteca Reactor-Netty, que tiene excelentes soluciones para este caso de uso .
  2. Utilice otro planificador. Project reactor sugiere que todas sus llamadas asíncronas operarán en un programador sin bloqueo, y para las llamadas síncronas, use otro programador (de bloqueo) de subproceso por solicitud. Hay dos programadores como este que puede usar: single() boundedElastic() . La diferencia es boundedElastic() limita la cantidad de subprocesos que puede abrir, por lo que terminará usando sus subprocesos como colas de bloqueo, lo cual es más seguro que single() .
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda