Estás consultando la documentación de Apigee y Apigee hybrid.
No hay documentación equivalente de
Apigee Edge para este tema.
Síntoma
Este problema se muestra como un error Gateway Timeout
con el estado HTTP 504
.
Mensaje de error
Puede que veas este error en Monitorización de APIs, Depuración u otras herramientas. El motivoTARGET_READ_TIMEOUT
indica que el tiempo de ejecución de Apigee no ha recibido una respuesta oportuna del destino durante la ejecución de una solicitud.
El valor predeterminado del tiempo de espera de lectura de destino (io.timeout.millis) es de 55 segundos. Esto significa que, si el destino no responde después de 55 segundos, 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 a |
---|---|---|
Objetivo lento | El destino no genera una respuesta oportuna. | Apigee X y Apigee Hybrid |
Problema de conectividad de TargetServer | Hay un problema de conectividad general con el destino cuando se configura <LoadBalancer> en TargetEndpoint.
|
Apigee X y Apigee Hybrid |
Causa: objetivo lento
Diagnóstico
Puede diagnosticar un problema de lentitud de un destino mediante la herramienta de depuración de Apigee:
- Crea una sesión de depuración para tu proxy de API.
- En la sesión de depuración, envía una solicitud e inspecciona el resultado de depuración.
Como puede ver en el ejemplo anterior, la solicitud de destino ha superado los 55 segundos, que es el límite de tiempo de espera de destino predeterminado. El límite de tiempo es configurable y, si lo has cambiado, la duración de la solicitud de destino coincidirá con el tiempo de espera que hayas definido. Por ejemplo, si el tiempo de espera es de 10 segundos, en ese caso, la solicitud de destino se agotará después de 10 segundos. Este comportamiento de "objetivo lento" es un claro indicio de que el objetivo no responde a una solicitud a tiempo.
Resolución
Apigee recomienda que evites usar destinos lentos. Por ejemplo, si la latencia objetivo normal es de 50 ms y experimentas una latencia de 55.000 ms, puede que tengas que investigar si hay algún problema con el objetivo.
Si tienes que aumentar el tiempo de espera, sigue estos pasos:
- En el editor de proxy, haz clic en la pestaña Desarrollar.
- En el panel de navegación, selecciona el endpoint de destino afectado.
- En el editor XML, busca el elemento XML
HTTPTargetConnection
:
- Añade 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 ha aumentado a 120 segundos. Ten en cuenta que el límite máximo es de 300 segundos. Para obtener más información, consulta la referencia de la propiedad Endpoints.
- Guarda la nueva revisión y despliega el proxy.
Si el problema persiste, consulta la sección Información de diagnóstico que debes recoger más abajo.
Causa: problema de conectividad de TargetServer
Diagnóstico
Apigee no revela la causa exacta de un problema de conectividad cuando se configura la propiedad de endpoint <LoadBalancer>
. Sin embargo, puedes deducir 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 eliminar
el elemento <LoadBalancer>
por completo e intentar acceder al destino directamente en el proxy.
Para diagnosticar el problema, usa la herramienta de depuración.
- Crea una sesión de depuración para tu proxy de API.
- En la sesión de depuración, envía una solicitud e inspecciona el resultado de depuración.
En el ejemplo anterior, se ha producido un tiempo de espera de nueve segundos. Como 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 que el destino es lento.
De forma predeterminada, Apigee vuelve a intentar una conexión dos veces más si se usa el elemento <LoadBalancer>
en TargetEndpoint. Como sabes que se ha intentado establecer la conexión tres veces en total y el tiempo de espera predeterminado para un error de conexión es de tres segundos (connect.timeout.millis), puedes suponer que el problema es de conectividad.
Resolución
Si se confirma que el problema es un tiempo de espera de conexión, consulta Error 503 de servicio no disponible de VPC Peering con TARGET_CONNECT_TIMEOUT.
Si tienes otros problemas, quita el elemento <LoadBalancer>
para depurar y ver el código de error exacto, y busca el código en el catálogo de errores.
Must Gather Diagnostic Information
Si el problema persiste incluso después de seguir las instrucciones anteriores, recoge la siguiente información de diagnóstico y ponte en contacto con el equipo de Asistencia de Google Cloud:
- ID del proyecto y nombre de la organización de Apigee
- Nombre(s) del proxy y el entorno.
- Intervalo de tiempo del problema.
- Frecuencia del problema
- Nombre de host de destino.
- Sesión de depuración con el problema.