Realización de conexión por par En el cliente Htpp

Tengo el siguiente código que está lanzando el error. ¿Cómo podemos llamar a API con el httpclient sin los errores de reinicio de conexión.

java.util.concurrent.ExecutionException: java.io.IOException: Connection reset by peer at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395) en java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999)

@Bean
public HttpClient httpClient() {
    return java.net.http.HttpClient.newHttpClient();
}
    
HttpRequest req =
    HttpRequest.newBuilder(URI.create(url))
        .header("Content-Type", "application/json")
        .header("Authorization", "Bearer " + tokenValue)
        .header("User-Agent", "admins-api")
        .POST(HttpRequest.BodyPublishers.ofString(inputJson))
        .build();

Pregunta hecha hace 3 años, 5 meses, 1 días - Por markupmaestro


2 Respuestas:

  • El error que estás experimentando indica que la conexión está siendo reseteada por el servidor remoto. Esta situación puede ocurrir por varias razones, como problemas de red intermitentes, problemas de configuración en el servidor o incluso una limitación en la cantidad de conexiones permitidas por el servidor.

    Para intentar solucionar este problema, puedes implementar algunas estrategias como manejar correctamente las excepciones, establecer un timeout en la conexión y trabajar con conexiones persistentes. Te dejo un ejemplo modificado de cómo podrías realizar la conexión con HttpClient teniendo en cuenta estas consideraciones:

    java
    @Bean
    public HttpClient httpClient() {
        return HttpClient.newBuilder()
                .connectTimeout(Duration.ofSeconds(10))
                .build();
    }
    
    try {
        HttpResponse response = httpClient().send(req, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() == 200) {
            String responseBody = response.body();
            // Procesar la respuesta recibida
        } else {
            // Manejar otros códigos de respuesta
        }
    } catch (IOException | InterruptedException e) {
        // Manejar las excepciones
    }
    

    En este ejemplo, se establece un timeout de conexión de 10 segundos y se manejan las excepciones IOException e InterruptedException. Además, se procesa la respuesta en función del código de estado recibido.

    Espero que esta información te sea útil para resolver tu problema de conexión. ¡Déjame saber si necesitas más ayuda!

    Respondida el Dec 17, 2020 a las 10:34 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error "java.io.IOException: Connection reset by peer" indica que la conexión se cerró inesperadamente durante la solicitud HTTP. Esto puede ocurrir debido a varias razones, que incluyen:

    Tiempo de espera de conexión agotado: El servidor podría estar tardando demasiado en responder, lo que lleva a que el cliente cierre la conexión. Tamaño de solicitud o respuesta demasiado grande: Si el tamaño de la solicitud o respuesta excede el límite permitido, el servidor puede cerrar la conexión. Problemas de red: Los problemas de red, como una latencia alta o una pérdida de paquetes, pueden provocar el restablecimiento de la conexión.

    Para resolver este problema, puedes intentar lo siguiente:

    • Aumenta el tiempo de espera de conexión: Ajusta el tiempo de espera de conexión en el cliente HTTP para permitir que el servidor tenga más tiempo para responder.
    • Comprueba el tamaño de la solicitud/respuesta: Asegúrate de que el tamaño de la solicitud y la respuesta no excedan los límites permitidos. Comprime o divide la solicitud/respuesta si es necesario.
    • Verifica la red: Asegúrate de que no haya problemas de red que puedan estar causando el restablecimiento de la conexión. Intenta utilizar una conexión de red diferente o verifica la configuración del firewall.
    • Intentos de reconexión: Implementa un mecanismo de reintento en el cliente HTTP para reintentar automáticamente las solicitudes fallidas después de un período de tiempo determinado.
    • Usa un grupo de conexiones: Crea un grupo de conexiones y usa conexiones persistentes para reutilizar las conexiones existentes, lo que puede reducir la probabilidad de restablecimientos de conexión.

    Además, puedes considerar lo siguiente:

    Usa un cliente HTTP de nivel superior: Hay bibliotecas de clientes HTTP de nivel superior que manejan automáticamente la administración de conexiones y los reintentos, lo que simplifica el proceso y reduce los errores de reinicio de conexión. Consulta la documentación del servidor:* Consulta la documentación del servidor para obtener información específica sobre los límites de tamaño y los tiempos de espera de conexión.

    Respondida el Dec 17, 2020 a las 10:44 - por Gemini

    Votos positivos: 0 | Votos negativos: 0