Compreender o conceito
Um timeout significa que quem espera não recebeu uma resposta dentro do limite; não prova que a operação remota falhou. Antes de repetir uma operação com efeitos, considera como detetar uma execução já concluída. Uma chave de idempotência precisa de um contrato de validade, armazenamento e resultado associado. Para falhas transitórias elegíveis, limita tentativas e tempo total. Backoff espaça novas tentativas e jitter reduz a sincronização entre clientes.
Aplicar e decidir
Exercício: uma cadeia tem três camadas e cada uma pode enviar até três tentativas por pedido recebido. Se todas repetirem, uma única ação inicial pode originar até 3 × 3 × 3 = 27 tentativas no último serviço. Faz o orçamento de repetição para o percurso completo, não apenas por componente. Distingue erros transitórios de validação inválida ou falta de autorização. Para pedidos com estado desconhecido, consulta ou reconcilia a operação antes de criar uma nova.
Aplicação no trabalho
Num timeout após submissão de uma instrução, o resultado remoto pode ser incerto. Mantém a identidade da operação e consulta o estado segundo o contrato. Para falhas transitórias elegíveis, combina limites, prazo global, backoff e jitter. Se várias camadas repetem, calcula o efeito multiplicador. Não uses retries para contornar rejeição de formato ou autorização; o mesmo pedido continua inválido.
Uma API de pagamento não responde, mas o pedido pode ter sido registado. Uma nova chave em cada tentativa pode criar operações distintas. O consumidor precisa de preservar a identidade da operação e respeitar o contrato de idempotência e consulta de estado do serviço.
Armadilhas comuns
Repetir falhas determinísticas; criar identidade nova em cada tentativa.
Tópicos relacionados: Medir o serviço e localizar a degradação · Mapear o percurso do pedido
Timeout não prova ausência de efeito; uma repetição precisa de limites e de semântica segura.
Referência: Addressing cascading failures · DR Middleware 2026.4; HotSpot JDK 25; JDBC 25; PostgreSQL 18; RabbitMQ 4.3; OpenSSL 3.5; explicitly scoped runtime references