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 motivoTARGET_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:
- Crie uma sessão de depuração para o proxy de API.
- 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:
- Selecione a guia Develop no Proxy Editor.
- No painel de navegação, selecione o endpoint de destino afetado.
- No editor XML, encontre o elemento XML
HTTPTargetConnection
:
- 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.
- 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.
- Crie uma sessão de depuração para o proxy de API.
- 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:
- ID do projeto e nome da organização da Apigee
- Nomes dos proxies e o ambiente.
- Período do problema.
- Frequência do problema
- Nome do host de destino
- Depurar a sessão com o problema.