Pular para o conteúdo

apps/messaging-streaming/sns-sqs-fanout-notifications

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

SNS-SQS Fanout Notifications

Fan-out com AWS SNS + SQS: ao confirmar uma transação, um único evento é publicado uma vez e entregue a três filas SQS independentes, cada uma consumida por um serviço isolado.

passos
6
arquivos
6
teste
1
tecnologias
5
Lógica puraTypeScriptBunAWS SQSAWS SNSMoto
Baixar cartão

Cenário

Ao confirmar uma transação de cartão de crédito, um banco precisa acionar três serviços de forma independente e paralela: a análise de fraude verifica o padrão da compra, o serviço de saldo debita a conta, e a auditoria registra a operação para compliance. O fan-out SNS → SQS garante que um único transaction.confirmed chegue às três filas sem acoplamento entre os serviços e com durabilidade (cada fila retém sua cópia).

Planta

Fluxo
10/10
ProducerTópico SNStransaction-confirmedFila transaction-fraudFila transaction-balanceFila transaction-auditConsumidor de fraudeConsumidor de saldoConsumidor de auditoriaDLQ fraudDLQ balanceDLQ auditPublish comamountCentsfilter amountCents>= 500000maxReceiveCountmaxReceiveCountmaxReceiveCount
10

10 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Tópico replica em filas independentes.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    O producer faz um Publish por transação confirmada, com amountCents e eventType em MessageAttributes

  2. 02

    O SNS copia a mensagem para cada fila inscrita; a subscription de fraude tem filter policy amountCents >= 500000 — a regra fica na subscription, não no consumidor

  3. 03

    Cada consumidor faz long poll (WaitTimeSeconds: 20) pedindo só as mensagens que cabem nos slots livres e desembrulha o envelope SNS, validando a transação

  4. 04

    Enquanto trata, estende a visibilidade; depois do efeito apaga em lote, conferindo Failed entrada por entrada

  5. 05

    Falha transitória → ChangeMessageVisibility com atraso: a contagem de recebimentos sobe e a RedrivePolicy move para a DLQ no maxReceiveCount

  6. 06

    Mensagem ilegível → copiada para a DLQ com o motivo e apagada, sem gastar recebimentos; o débito leva o id da transação como chave de idempotência

apps/messaging-streaming/sns-sqs-fanout-notifications

6 arquivos

src/

  • producer_transaction.tsPublica a transação com atributos para filter policy
  • envelope_transaction.tsDesembrulha o envelope SNS e valida a transação
  • worker_sqs.tsLoop de consumo: slots, heartbeat de visibilidade, delete em lote, retry por visibilidade e DLQ
  • consumer_transaction.tsOs três serviços (fraude, saldo, auditoria), um processo por serviço
  • config_transaction.tsVariáveis de ambiente validadas no boot
  • worker_sqs.test.tstesteIntegração com moto: fan-out com filter policy no limite, delete após o efeito, mensagem ilegível na DLQ e redrive

Executar · só Bun

  1. cp .env.example .env# variáveis de ambiente
  2. bun install# dependências
  3. bun run consumer fraud# um terminal por serviço
  4. bun run consumer balance
  5. bun run consumer audit
  6. bun run demo# publica duas transações
  7. bun run test# testes unitários

Roda contra a AWS: exige credenciais pela cadeia padrão do SDK, o tópico e as três filas com DLQ criados pela IaC. Os testes rodam contra o moto.

Requisitos
Bun
Sobe junto
Moto

Por que se relacionam

Teste rápido

Qual destes combina com SNS → SQS Fan-out Notifications?

Próximo projeto · Comunicação & MensageriaSQS FIFO Bank Transfer
Esc

↑ ↓ navegarEnter abrir191 resultados