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

Esta é a documentação da Apigee e da Apigee híbrida.
Não há documentação equivalente do Apigee Edge para esse tópico.

Sintoma

Esse problema aparece como um erro Gateway Timeout com status HTTP 504.

Mensagem de erro

É possível encontrar esse erro em Monitoramento de APIs, Depuração ou em outras ferramentas. O motivo TARGET_READ_TIMEOUT indica que o ambiente de execução da Apigee não recebeu uma resposta do destino durante a execução de uma solicitação.

O valor padrão de tempo limite de leitura de destino (io.timeout.millis) é de 55 segundos. Isso significa que, se após 55 segundos o destino não responder, a Apigee gerará 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 solução de problemas aplicáveis para
Destino lento O destino não produz uma resposta em tempo hábil. Apigee X e Apigee híbrida
Problema de conectividade do TargetServer Há um problema geral de conectividade com o destino quando <LoadBalancer> está configurado no TargetEndpoint. Apigee X e Apigee híbrida

Causa: destino lento

Diagnóstico

É possível diagnosticar um problema de destino lento usando a ferramenta de depuração da Apigee:

  1. Crie uma sessão de depuração para o proxy de API.
  2. Na sessão de depuração, envie uma solicitação e inspecione a saída de depuração.

Como mostrado no exemplo acima, a solicitação de destino excedeu 55 segundos, que é o tempo limite padrão de destino. O limite de tempo é configurável e, se você tiver alterado o tempo limite, a duração da solicitação de destino corresponderá ao tempo limite definido. Por exemplo, se o tempo limite for de 10 segundos, a solicitação de destino atingirá o tempo limite após 10 segundos. Esse comportamento de "destino lento" é uma indicação clara de que o destino não está respondendo a uma solicitação a tempo.

Resolução

A Apigee recomenda que você evite usar destinos lentos. Por exemplo, se a latência normal for de 50 ms e você tiver uma latência de 55.000 ms, talvez seja necessário investigar se há um problema com o destino.

Se for necessário aumentar o tempo limite, siga estas etapas:

  1. Selecione a guia Develop no Proxy Editor.
  2. No painel de navegação, selecione o endpoint de destino afetado.
  3. No editor 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 tempo limite aumenta para 120 segundos. 300 segundos é o limite máximo. Para mais informações, consulte a Referência da propriedade do Endpoints.

  5. Salve a nova revisão e implante o proxy.

Se o problema persistir, acesse Precisa de informações de diagnóstico abaixo.

Causa: problema de conectividade do TargetServer

Diagnóstico

A Apigee não revela a causa exata de um problema de conectividade quando você configura a propriedade do endpoint <LoadBalancer>. No entanto, você pode inferir a causa de um problema de conectividade a partir do tempo decorrido da solicitação de destino. Como um método de depuração, você pode tentar remover o elemento <LoadBalancer> por completo e tentar alcançar 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 proxy de API.
  2. Na sessão de depuração, envie uma solicitação e inspecione a saída de depuração.

No exemplo acima, o tempo limite foi atingido em nove segundos. Como não são 55 segundos, você sabe que a causa do erro não é o tempo limite ter sido excedido devido a um destino lento. Por padrão, a Apigee tenta uma conexão mais duas vezes se o elemento <LoadBalancer> for usado no TargetEndpoint. Como você sabe que houve três tentativas de conexão no total e o tempo limite padrão de um erro de conexão é de três segundos (connect.timeout.millis), é possível considerar que o problema é de conectividade.

Resolução

Se for confirmado que o problema é um tempo limite de conexão, consulte Erro de peering de VPC 503 serviço indisponível 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.

É necessário coletar informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, reúna as seguintes informações de diagnóstico e entre em contato com o Suporte do Google Cloud:

  1. ID do projeto e nome da organização da Apigee
  2. Nomes dos proxies e o ambiente.
  3. Período do problema.
  4. Frequência do problema
  5. Nome do host de destino
  6. Depurar a sessão com o problema.