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 motivoTARGET_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:
- Crie uma sessão de depuração para o seu proxy de API.
- 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:
- Clique no separador Desenvolver no editor de proxy.
- No painel de navegação, selecione o ponto final de destino afetado.
- No editor de 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 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.
- 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.
- Crie uma sessão de depuração para o seu proxy de API.
- 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:
- ID do projeto e nome da organização Apigee
- Nomes dos proxies e o ambiente.
- Intervalo de tempo do problema.
- Frequência do problema
- Nome do anfitrião de destino.
- Sessão de depuração com o problema.