Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Non esiste documentazione equivalente di
Apigee Edge per questo argomento.
Sintomo
Questo problema si manifesta come un errore Gateway Timeout con stato HTTP 504.
Messaggio di errore
Potresti visualizzare questo errore in Monitoraggio API, Debug o in altri strumenti. Il motivoTARGET_READ_TIMEOUT indica che il runtime Apigee non ha ricevuto una risposta tempestiva dal target durante l'esecuzione di una richiesta.
Il valore predefinito del timeout di lettura target (io.timeout.millis) è 55 secondi. Ciò significa che se dopo 55 secondi la destinazione non risponde, Apigee genera questo errore:
{"fault":{"faultstring":"Gateway Timeout",
"detail":{"errorcode":"messaging.adaptors.http.flow.GatewayTimeout",
"reason":"TARGET_READ_TIMEOUT"}}}Possibili cause
| Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
|---|---|---|
| Target lento | La destinazione non produce una risposta tempestiva. | Apigee X e Apigee hybrid |
| Problema di connettività di TargetServer | Si verifica un problema di connettività generale con la destinazione quando
<LoadBalancer> è configurato
su TargetEndpoint.
|
Apigee X e Apigee hybrid |
Causa: target lento
Diagnosi
Puoi diagnosticare un problema di lentezza del target utilizzando lo strumento di debug Apigee:
- Crea una sessione di debug per il proxy API.
- Nella sessione di debug, invia una richiesta e controlla l'output di debug.
Come puoi vedere nell'esempio precedente, la richiesta target ha superato i 55 secondi, che è il timeout predefinito del target. Il limite di tempo è configurabile e, se hai modificato il timeout, la durata della richiesta di destinazione corrisponderà al timeout impostato. Ad esempio, se il timeout è di 10 secondi, in questo caso una richiesta di destinazione scadrà dopo 10 secondi. Questo comportamento di "target lento" è un chiaro indicatore che il target non risponde a una richiesta in tempo.
Risoluzione
Apigee consiglia di evitare di utilizzare target lenti. Ad esempio, se la latenza target normale è di 50 ms e riscontri una latenza di 55000 ms, potrebbe essere necessario verificare se si è verificato un problema con il target.
Se devi aumentare il timeout, segui questi passaggi:
- Fai clic sulla scheda Sviluppa nell'editor proxy.
- Nel riquadro di navigazione, seleziona l'endpoint target interessato.
- Nell'editor XML, individua l'elemento XML
HTTPTargetConnection:
- Aggiungi la proprietà
io.timeout.millisnell'elemento<HTTPTargetConnection>e specifica il nuovo limite di tempo in millisecondi, ad esempio:<HTTPTargetConnection> <URL>https://my-very-slow-target.example.com</URL> <Properties> <Property name="io.timeout.millis">120000</Property> </Properties> </HTTPTargetConnection>Nell'esempio precedente, il timeout viene aumentato a 120 secondi. Tieni presente che 300 secondi è il limite massimo. Per ulteriori informazioni, consulta Riferimento per le proprietà degli endpoint.
- Salva la nuova revisione ed esegui il deployment del proxy.
Se il problema persiste, vai a Informazioni di diagnostica obbligatorie di seguito.
Causa: problema di connettività di TargetServer
Diagnosi
Apigee non rivela la causa esatta di un problema di connettività quando configuri la proprietà endpoint <LoadBalancer>. Tuttavia, potresti essere in grado di dedurre la causa di un problema di connettività dal tempo trascorso dalla richiesta di destinazione. Come metodo di debug, puoi provare a rimuovere completamente l'elemento <LoadBalancer> e a raggiungere il target direttamente nel proxy.
Per diagnosticare il problema, utilizza lo strumento di debug.
- Crea una sessione di debug per il proxy API.
- Nella sessione di debug, invia una richiesta e controlla l'output di debug.
Nell'esempio precedente, sono stati necessari nove secondi prima che si verificasse un timeout. Poiché non sono 55 secondi,
sai che la causa dell'errore non è il superamento del limite di timeout a causa di un target lento.
Per impostazione predefinita, Apigee riprova una connessione altre due volte se l'elemento <LoadBalancer> viene utilizzato in TargetEndpoint. Poiché sai che la connessione è stata tentata tre volte
e che il timeout predefinito per un errore di connessione è di tre secondi
(connect.timeout.millis),
puoi presumere che si tratti di un problema di connettività.
Risoluzione
Se si conferma che il problema è un timeout di connessione, consulta Errore di servizio non disponibile 503 del peering VPC con TARGET_CONNECT_TIMEOUT.
Per altri problemi, rimuovi l'elemento <LoadBalancer>
per eseguire il debug e visualizzare il codice di errore esatto, quindi controlla se il codice è presente nel
catalogo degli errori.
È necessario raccogliere informazioni di diagnostica
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni di diagnostica e poi contatta l'assistenza Google Cloud:
- ID progetto e nome dell'organizzazione Apigee
- I nomi dei proxy e l'ambiente.
- Periodo di tempo in cui si è verificato il problema.
- Frequenza del problema
- Nome host target.
- Sessione di debug con il problema.