504 Tiempo de espera de la puerta de enlace: Tiempo de espera de lectura del destino

Estás viendo la documentación de Apigee y Apigee hybrid.
No hay documentación de Apigee Edge equivalente para este tema.

Síntoma

Este problema aparece como un error Gateway Timeout con el estado HTTP 504.

Mensaje de error

Es posible que veas este error en Supervisión de API, Depuración o en otras herramientas. El motivo TARGET_READ_TIMEOUT indica que el entorno de ejecución de Apigee no recibió una respuesta oportuna del destino durante la ejecución de una solicitud.

El valor predeterminado de tiempo de espera de lectura de destino (io.timeout.millis) es de 55 segundos. Esto significa que si después de 55 segundos el destino no responde, Apigee genera este error:

{"fault":{"faultstring":"Gateway Timeout",
  "detail":{"errorcode":"messaging.adaptors.http.flow.GatewayTimeout",
  "reason":"TARGET_READ_TIMEOUT"}}}

Causas posibles

Causa Descripción Instrucciones de solución de problemas aplicables para
Destino lento El destino no produce una respuesta oportuna. Apigee X y Apigee hybrid
Problema de conectividad de TargetServer Hay un problema general de conectividad con el destino cuando <LoadBalancer> está configurado en el TargetEndpoint. Apigee X y Apigee hybrid

Causa: destino lento

Diagnóstico

Puedes diagnosticar un problema de destino lento con la herramienta de depuración de Apigee:

  1. Crea una sesión de depuración para tu proxy de API.
  2. En la sesión de depuración, envía una solicitud y, luego, inspecciona el resultado de depuración.

Como puedes ver en el ejemplo anterior, la solicitud de destino superó 55 segundos, que es el límite de tiempo de espera de destino predeterminado. El límite de tiempo se puede configurar y, si cambiaste el tiempo de espera, la duración de la solicitud de destino coincidirá con el tiempo de espera que estableciste. Por ejemplo, si el tiempo de espera es de 10 segundos, en ese caso, se agotará el tiempo de espera de una solicitud de destino después de 10 segundos. Este comportamiento de “destino lento” es una indicación clara de que el destino no responde a una solicitud a tiempo.

Solución

Apigee recomienda que evites usar destinos lentos. Por ejemplo, si la latencia de destino normal es de 50 ms y experimentas una latencia de 55,000 ms, es posible que debas investigar si hay un problema con el destino.

Si debes aumentar el tiempo de espera, sigue estos pasos:

  1. Selecciona la pestaña Desarrollo en el Editor de proxies.
  2. En el panel de navegación, selecciona el extremo de destino afectado.
  3. En el editor de XML, busca el elemento XML HTTPTargetConnection:

  4. Agrega la propiedad io.timeout.millis en el elemento <HTTPTargetConnection> y especifica el nuevo límite de tiempo en milisegundos, por ejemplo:
    <HTTPTargetConnection>
      <URL>https://my-very-slow-target.example.com</URL>
      <Properties>
        <Property name="io.timeout.millis">120000</Property>
      </Properties>
    </HTTPTargetConnection>

    En el ejemplo anterior, el tiempo de espera se aumenta a 120 segundos. Ten en cuenta que el límite máximo es 300 segundos. Si deseas obtener más información, consulta Referencia de la propiedad de Endpoints.

  5. Guarda la revisión nueva e implementa el proxy.

Si el problema persiste, consulta Recopila información de diagnóstico a continuación.

Causa: Problema de conectividad de TargetServer

Diagnóstico

Apigee no revela la causa exacta de un problema de conectividad cuando configuras la propiedad de extremo <LoadBalancer>. Sin embargo, es posible que puedas inferir la causa de un problema de conectividad a partir del tiempo transcurrido de la solicitud de destino. Como método de depuración, puedes intentar quitar el elemento <LoadBalancer> por completo y, luego, intentar llegar al destino directamente en el proxy.

Para diagnosticar el problema, usa la Herramienta de depuración.

  1. Crea una sesión de depuración para tu proxy de API.
  2. En la sesión de depuración, envía una solicitud y, luego, inspecciona el resultado de depuración.

En el ejemplo anterior, el tiempo de espera tardó nueve segundos. Dado que no son 55 segundos, sabes que la causa del error no es que se haya superado el límite de tiempo de espera debido a un destino lento. De forma predeterminada, Apigee vuelve a intentar una conexión dos veces más si el elemento <LoadBalancer> se usa en el TargetEndpoint. Dado que sabes que la conexión se intentó tres veces en total y el tiempo de espera predeterminado de un error de conexión es de tres segundos (connect.timeout.millis), puedes suponer que el problema es de conectividad.

Solución

Si se confirma que el problema es un tiempo de espera de conexión, consulta Error 503 de servicio no disponible del intercambio de tráfico entre VPC con TARGET_CONNECT_TIMEOUT.

Para otros problemas, quita el elemento <LoadBalancer> a fin de depurar y revelar el código de error exacto, y verifica el código en el catálogo de errores.

Se debe recopilar información de diagnóstico

Si el problema persiste incluso después de seguir las instrucciones anteriores, recopila la siguiente información de diagnóstico y, luego, comunícate con Asistencia de Google Cloud:

  1. ID del proyecto y nombre de la organización de Apigee
  2. Nombres de proxy y el entorno.
  3. Período del problema.
  4. Frecuencia del problema
  5. Destino (nombre de host)
  6. Sesión de depuración con el problema.