Pular para o conteúdo

apps/patterns/timeout-pattern

030 · Padrões Fundamentais · ≈ 5 min de estudo

Timeout Pattern

Limita quanto tempo o chamador espera por uma operação e cancela a chamada de rede que passou do limite. Cada salto tem o próprio SLA, e o prazo de negócio é fixado uma vez na entrada e propagado: um salto recebe o que sobrou, nunca um orçamento novo. Use em toda chamada a banco, API externa ou serviço interno.

passos
6
arquivos
5
teste
1
tecnologias
4
Lógica puraTypeScriptBunElysiaStryker
Baixar cartão

Cenário

Um banco digital autoriza PIX em até 600 ms, passando por antifraude e core bancário, ambos no mesmo processo Elysia com latência configurável. Com os dois rápidos, o PIX é autorizado. Com o antifraude em 800 ms, o salto estoura o próprio SLA de 300 ms. Com antifraude em 250 ms e débito em 450 ms, cada salto está dentro do seu SLA, mas juntos passam do prazo: o débito é cortado aos 350 ms que restavam.

Planta

Sequência
6/6
fixa o prazo absoluto na entrada1POST /fraud-checks, limite min(300, 600)2aprovado em 250 ms3POST /debits, limite min(500, 350 restantes)4abort aos 350 ms: prazo do pagamento esgotado5[TIMEOUT] account.debit6Pagamento PIX (prazo de 600 ms)Antifraude (SLA 300 ms)Core bancário (SLA 500 ms)
6

6 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Limite de tempo corta a espera.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    `AbortSignal` até o `fetch`O timeout cancela a conexão de verdade, não só abandona a Promise

  2. 02

    Race contra o abortOperação que ignora o signal também deixa de ser esperada

  3. 03

    Timer limpoclearTimeout no finally impede o timer de sobreviver a uma resposta rápida

  4. 04

    Prazo propagadodeadlineCreate fixa o instante absoluto; cada salto lê remainingMs() em vez de reiniciar o orçamento

  5. 05

    Limite por saltohopRun usa min(SLA do salto, prazo restante); sem prazo restante, falha sem chamar

  6. 06

    Erro explícitoErrorTimeout com [TIMEOUT], o nome da operação e o limite; falha de rede sobe inalterada

apps/patterns/timeout-pattern

5 arquivos

src/

  • timeout_payment.tstimeoutRun, deadlineCreate e hopRun
  • api_bank.tsAntifraude e core bancário em processo Elysia, com latência sob comando
  • timeout_payment.test.tstesteAbort do sinal, operação que ignora o sinal, timer limpo, limite por salto e fronteira do prazo
  • demo.tsdemoSobe o banco e roda os três cenários

./

  • stryker.config.jsoninfraMutação sobre src/timeout_payment.ts

Executar · só Bun

  1. bun install# dependências
  2. bun run demo# roda o cenário

Testes: bun run test. Mutação: bun run test:mutation.

Requisitos
Bun

Por que se relacionam

Teste rápido

Qual é o próximo passo depois de Timeout Pattern?

Próximo projeto · Padrões FundamentaisTwo-Phase Commit
Esc

↑ ↓ navegarEnter abrir191 resultados