Pular para o conteúdo

apps/messaging-streaming/pub-sub

051 · Comunicação & Mensageria · ≈ 6 min de estudo

Pub/Sub

Publicador emite eventos para subjects nomeados sem saber quem os recebe. Subscribers se inscrevem nos subjects de interesse — um evento pode ser consumido por N subscribers simultaneamente.

passos
6
arquivos
6
teste
1
tecnologias
4
Infraestrutura realTypeScriptBunNATSDocker
Baixar cartão

Cenário

O serviço de pagamentos publica um evento por pagamento (PIX, TED, boleto). Notificação avisa o cliente, auditoria grava tudo para compliance e antifraude olha só PIX. Nenhum conhece os outros, e a auditoria não pode perder evento porque ficou fora do ar num deploy.

Planta

Fluxo
6/6
Serviço de pagamentosStream PAYMENT_EVENTpayment.rail.estadoretenção InterestConsumer durávelnotificationpayment.*.*Consumer durável auditpayment.>Consumer durável fraudpayment.pix.*fraud instância 1fraud instância 2js.publish com msgID
6

6 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Um tópico, vários assinantes.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    O publicador chama js.publish("payment.pix.approved", ...) com msgID: o stream confirma a gravação e descarta a repetição na janela de duplicata

  2. 02

    Cada assinante tem um consumer durável com filtro próprio: payment.*.* (um token por *), payment.> (um ou mais), payment.pix.*

  3. 03

    Todo assinante interessado recebe sua cópia; cada um confirma com ack depois de tratar

  4. 04

    Retenção Interest: o evento fica no stream enquanto algum assinante ainda deve o ack e sai quando todos confirmaram

  5. 05

    Assinante fora do ar retoma do ponto do seu consumer — no NATS core o evento publicado sem assinante ativo se perde

  6. 06

    Várias instâncias do mesmo assinante compartilham o consumer: dentro de um assinante cada evento é tratado uma vez

apps/messaging-streaming/pub-sub

6 arquivos

src/

  • stream_payment.tsStream com retenção Interest, subject por trilho e estado, publicação com msgID
  • subscriber_payment.tsConsumers duráveis por assinante, filtros e loop com ack, nak com atraso e term
  • config_payment.tsVariáveis de ambiente validadas no boot
  • subscriber_payment.test.tstesteIntegração com JetStream real: cópia por assinante e filtro, assinante que volta, retenção por interesse, instâncias sem duplicata e publicação repetida
  • demo.tsdemoTrês pagamentos com a auditoria fora do ar e a volta dela

./

  • docker.shinfraSobe o NATS 2 com JetStream na porta 4222

Executar · com Docker

  1. ./docker.sh up# sobe NATS
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário
  5. bun run test# integração contra o serviço real
Requisitos
BunDocker
Sobe junto
NATS

Por que se relacionam

NATS core × JetStream

Aspecto NATS core JetStream
Entrega At-most-once At-least-once com ack
Assinante fora do ar Perde o evento Retoma do consumer durável
Uso Cotação em tempo real, sinal efêmero Pagamento, auditoria — não pode perder

Teste rápido

Qual destes combina com Publish–Subscribe?

Próximo projeto · Comunicação & MensageriaRequest-Response
Esc

↑ ↓ navegarEnter abrir191 resultados