Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Non esiste una equivalente
Documentazione 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 della destinazione (io.timeout.millis) è di 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 | Le istruzioni di risoluzione dei problemi applicabili a |
---|---|---|
Target lento | Il target 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: obiettivo lento
Diagnosi
Puoi diagnosticare un problema di destinazione lento 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 corrisponde al timeout impostato. Ad esempio, se il timeout è 10 secondi, in questo scenario una richiesta di destinazione scade dopo 10 secondi. Questo comportamento di "target lento" è un chiaro indicatore del fatto 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 la latenza è di 55.000 ms, potrebbe essere necessario indagare se c'è un problema con il target.
Per aumentare il timeout, procedi nel seguente modo:
- Fai clic sulla scheda Sviluppo nell'editor proxy.
- Nel riquadro di navigazione, seleziona l'endpoint di destinazione interessato.
- Nell'editor XML, individua l'elemento XML
HTTPTargetConnection
:
- Aggiungi la proprietà
io.timeout.millis
nell'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, vedi Endpoint un riferimento alle proprietà.
- Salva la nuova revisione ed esegui il deployment del proxy.
Se il problema persiste, vai all'articolo Raccogliere obbligatoriamente informazioni di diagnostica di seguito.
Causa: problema di connettività di TargetServer
Diagnosi
Apigee non rivela la causa esatta di un problema di connettività quando configuri
<LoadBalancer>
dell'endpoint. Potresti riuscire a dedurre la causa di un problema di connettività, tuttavia:
dal tempo trascorso della richiesta di destinazione. Come metodo di debug, puoi provare a rimuovere
l'elemento <LoadBalancer>
e provare 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 dura 55 secondi,
sai che la causa dell'errore non è che il limite di timeout è stato superato a causa di un target lento.
Per impostazione predefinita, Apigee riprova a connettersi altre due volte se l'elemento <LoadBalancer>
di destinazione 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 viene confermato che il problema è un timeout della connessione, consulta Errore di servizio di peering VPC 503 non disponibile 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.
Raccogliere informazioni diagnostiche
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 di destinazione.
- Sessione di debug con il problema.