Pular para o conteúdo

apps/messaging-streaming/sqs-fifo-bank-transfer

076 · Comunicação & Mensageria · ≈ 5 min de estudo

SQS FIFO Bank Transfer

FIFO + Idempotency (exactly-once) com AWS SQS FIFO: transferências de uma mesma conta são processadas na ordem correta e um reenvio por falha de rede nunca causa duplo débito.

passos
6
arquivos
6
teste
1
tecnologias
4
Lógica puraTypeScriptBunAWS SQSMoto
Baixar cartão

Cenário

Um banco processa transferências PIX e TED. Duas garantias são críticas: as transferências de uma mesma conta de origem são liquidadas na ordem em que foram pedidas, e uma transferência reenviada após falha de rede não debita duas vezes. A fila SQS FIFO entrega as duas com MessageGroupId e MessageDeduplicationId.

Planta

Fluxo
6/6
Pedido de transferênciaPIX ou TEDProducertransfer.fifoConsumerDeleteMessageBatchChangeMessageVisibility:grupo esperatransfer-dlq.fifoGroupId = contade origemDeduplicationId =id da transferênciaem ordem dentrodo grupoliquidoufalhoumaxReceiveCount
6

6 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Ordem e deduplicação por conta.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    O producer envia cada transferência com MessageGroupId = conta de origem e MessageDeduplicationId = id da transferência

  2. 02

    A fila entrega em ordem dentro de cada grupo; pagadores diferentes correm em paralelo

  3. 03

    O reenvio com o mesmo id dentro de 5 minutos é descartado pela própria fila

  4. 04

    Enquanto uma transferência de um pagador está em voo — inclusive esperando retry —, as seguintes do mesmo pagador não são entregues: nenhum débito ultrapassa o anterior

  5. 05

    Retry por ChangeMessageVisibility; esgotado o maxReceiveCount, a RedrivePolicy move para a DLQ FIFO; mensagem ilegível vai direto, com o grupo original

  6. 06

    A deduplicação da fila vale só 5 minutos: a liquidação envia o id da transferência como chave de idempotência ao razão

apps/messaging-streaming/sqs-fifo-bank-transfer

6 arquivos

src/

  • transfer_fifo.tsTransferência, envio com grupo por pagador e deduplicação pelo id, validação do corpo
  • worker_sqs.tsLoop de consumo: slots, heartbeat de visibilidade, delete em lote, retry por visibilidade e DLQ FIFO
  • consumer_transfer.tsLiquidação com chave de idempotência
  • producer_transfer.tsTransferências de dois pagadores e um reenvio
  • config_transfer.tsVariáveis de ambiente validadas no boot
  • worker_sqs.test.tstesteIntegração com moto: ordem por pagador, reenvio descartado, retry que bloqueia o grupo e envio sem grupo recusado

Executar · só Bun

  1. cp .env.example .env# variáveis de ambiente
  2. bun install# dependências
  3. bun run consumer# terminal 1
  4. bun run demo# terminal 2
  5. bun run test# testes unitários

Roda contra a AWS: exige credenciais pela cadeia padrão do SDK e a fila FIFO com DLQ criadas pela IaC. Os testes rodam contra o moto.

Requisitos
Bun
Sobe junto
Moto

Por que se relacionam

Teste rápido

Qual destes combina com SQS FIFO Bank Transfer?

Próximo projeto · Comunicação & MensageriaSQS Order Processor
Esc

↑ ↓ navegarEnter abrir191 resultados