504 Timeout gateway - Timeout di lettura della destinazione

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Non esiste una equivalente Documentazione di Apigee Edge per questo argomento.

Sintomo

Questo problema viene visualizzato come errore Gateway Timeout con stato HTTP 504.

Messaggio di errore

Potresti visualizzare questo errore in Monitoraggio delle API, Debug o altri strumenti. Il motivo TARGET_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 il target non risponde, Apigee lancia 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à del server di destinazione Si è verificato un problema di connettività generale con il target quando L'app <LoadBalancer> è configurata sul TargetEndpoint. Apigee X e Apigee hybrid

Causa: obiettivo lento

Diagnosi

Puoi diagnosticare un problema di destinazione lento utilizzando lo strumento di debug Apigee:

  1. Crea una sessione di debug per il proxy API.
  2. 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, ovvero predefinita timeout del target limite. 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. Un obiettivo così lento il comportamento è chiaro un'indicazione che la destinazione non risponde in tempo a una richiesta.

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:

  1. Fai clic sulla scheda Sviluppo nell'editor proxy.
  2. Nel riquadro di navigazione, seleziona l'endpoint di destinazione interessato.
  3. Nell'editor XML, trova l'elemento XML HTTPTargetConnection:

  4. Aggiungi la proprietà io.timeout.millis nel campo <HTTPTargetConnection> e specificare 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à.

  5. 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.

  1. Crea una sessione di debug per il proxy API.
  2. Nella sessione di debug, invia una richiesta e controlla l'output di debug.

Nell'esempio precedente, il timeout ha richiesto nove secondi. 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. Perché sai che la connessione è stata tentata tre volte in totale, e il timeout predefinito per un errore di connessione è di tre secondi (connect.timeout.millis), puoi supporre che il problema sia 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 <LoadBalancer> per eseguire il debug e visualizzare l'esatta codice di errore e verifica se il codice catalogo degli errori.

Raccogliere informazioni diagnostiche

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli i seguenti dati informazioni diagnostiche e contatta Google Assistenza Cloud:

  1. ID progetto e nome organizzazione Apigee
  2. I nomi del proxy e l'ambiente.
  3. Periodo di tempo in cui si è verificato il problema.
  4. Frequenza del problema
  5. Nome host di destinazione.
  6. Sessione di debug con il problema.