504 Tempo limite do gateway – Tempo limite de leitura do destino

Está a ver a documentação do Apigee e do Apigee Hybrid.
Não existe um equivalente na documentação do Apigee Edge para este tópico.

Sintoma

Este problema é apresentado como um erro Gateway Timeout com o estado HTTP 504.

Mensagem de erro

Pode ver este erro na Monitorização de APIs, na depuração ou noutras ferramentas. O motivo TARGET_READ_TIMEOUT indica que o tempo de execução do Apigee não recebeu uma resposta atempada do destino durante a execução de um pedido.

O valor predefinido do tempo limite de leitura do destino (io.timeout.millis) é de 55 segundos. Isto significa que, se após 55 segundos o destino não responder, o Apigee gera este erro:

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

Causas possíveis

Causa Descrição Instruções de resolução de problemas aplicáveis a
Objetivo lento O destino não produz uma resposta atempada. Apigee X e Apigee Hybrid
Problema de conetividade do TargetServer Existe um problema geral de conetividade com o destino quando <LoadBalancer> está configurado no TargetEndpoint. Apigee X e Apigee Hybrid

Causa: alvo lento

Diagnóstico

Pode diagnosticar um problema de destino lento através da ferramenta de depuração do Apigee:

  1. Crie uma sessão de depuração para o seu proxy de API.
  2. Na sessão de depuração, envie um pedido e inspecione o resultado da depuração.

Como pode ver no exemplo acima, o pedido de destino excedeu os 55 segundos, que é o limite de tempo limite de destino predefinido. O limite de tempo é configurável e, se tiver alterado o limite de tempo, a duração do pedido de destino vai corresponder ao limite de tempo que definiu. Por exemplo, se o seu tempo limite for de 10 segundos, nesse cenário, um pedido de destino vai atingir o tempo limite após 10 segundos. Este comportamento de "alvo lento" é uma indicação clara de que o alvo não está a responder a um pedido a tempo.

Resolução

A Apigee recomenda que evite usar alvos lentos. Por exemplo, se a latência alvo normal for de 50 ms e tiver uma latência de 55 000 ms, pode ter de investigar se existe um problema com o alvo.

Se tiver de aumentar o limite de tempo, siga estes passos:

  1. Clique no separador Desenvolver no editor de proxy.
  2. No painel de navegação, selecione o ponto final de destino afetado.
  3. No editor de XML, encontre o elemento XML HTTPTargetConnection:

  4. Adicione a propriedade io.timeout.millis no elemento <HTTPTargetConnection> e especifique o novo limite de tempo em milissegundos, por exemplo:
    <HTTPTargetConnection>
      <URL>https://my-very-slow-target.example.com</URL>
      <Properties>
        <Property name="io.timeout.millis">120000</Property>
      </Properties>
    </HTTPTargetConnection>

    No exemplo acima, o limite de tempo é aumentado para 120 segundos. Tenha em atenção que 300 segundos é o limite máximo. Para mais informações, consulte a referência da propriedade Endpoints.

  5. Guarde a nova revisão e implemente o proxy.

Se o problema persistir, aceda a Informações de diagnóstico obrigatórias abaixo.

Causa: problema de conetividade do TargetServer

Diagnóstico

O Apigee não revela a causa exata de um problema de conetividade quando configura a propriedade do ponto final <LoadBalancer>. Pode inferir a causa de um problema de conetividade, no entanto, a partir do tempo decorrido do pedido de destino. Como método de depuração, pode tentar remover o elemento <LoadBalancer> por completo e tentar atingir o destino diretamente no proxy.

Para diagnosticar o problema, use a ferramenta de depuração.

  1. Crie uma sessão de depuração para o seu proxy de API.
  2. Na sessão de depuração, envie um pedido e inspecione o resultado da depuração.

No exemplo acima, demorou nove segundos para ocorrer um limite de tempo. Uma vez que não são 55 segundos, sabe que a causa do erro não é o facto de o limite de tempo limite ter sido excedido devido a um destino lento. Por predefinição, o Apigee tenta estabelecer uma ligação mais duas vezes se o elemento <LoadBalancer> for usado no TargetEndpoint. Como sabe que a ligação foi tentada três vezes no total e o tempo limite predefinido para um erro de ligação é de três segundos (connect.timeout.millis), pode assumir que o problema é um problema de conetividade.

Resolução

Se confirmar que o problema é um limite de tempo da ligação, consulte o artigo Erro de serviço indisponível 503 de interligação de VPC com TARGET_CONNECT_TIMEOUT.

Para outros problemas, remova o elemento <LoadBalancer> para depurar e revelar o código de erro exato, e verifique o código no catálogo de erros.

Informações de diagnóstico necessárias

Se o problema persistir mesmo depois de seguir as instruções acima, recolha as seguintes informações de diagnóstico e, em seguida, contacte o apoio técnico do Google Cloud:

  1. ID do projeto e nome da organização Apigee
  2. Nomes dos proxies e o ambiente.
  3. Intervalo de tempo do problema.
  4. Frequência do problema
  5. Nome do anfitrião de destino.
  6. Sessão de depuração com o problema.