Pular para o conteúdo

apps/messaging-streaming/control-bus

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

Control Bus

Canal de mensageria separado e dedicado a administrar o pipeline de processamento — pausar/retomar um consumer, mudar nível de log, consultar métricas em tempo real — sem misturar comandos administrativos com o canal onde as mensagens de negócio trafegam.

passos
6
arquivos
8
teste
1
tecnologias
5
Infraestrutura realTypeScriptBunElysiaRabbitMQDocker
Baixar cartão

Cenário

Um banco digital processa PIX continuamente através de um consumer dedicado. Durante uma manutenção programada ou uma investigação de incidente, um operador precisa pausar o processamento desse consumer específico — sem derrubar o serviço, sem afetar outros consumers, e sem misturar o comando administrativo com o fluxo de transações. Um canal de controle separado (control.bus) permite isso, além de consultar métricas (mensagens processadas, taxa de erro) em tempo real via RPC sobre a própria mensageria.

Planta

Fluxo
7/7
OperadorControl PanelAPI HTTP :8116control.bustopic exchangepix.datatopic exchangePIX ProducerPIX ConsumerPOST pause,resume, log-levelGET statuscontrol.pix-consumer-1.commandcomandorespostacorrelationIdpayment.pix.receivedconsome
7

7 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Canal de comando gerencia o fluxo.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    O producer_pix.ts publica transações PIX continuamente na exchange de dados pix.data, com confirmação do broker

  2. 02

    O consumer_pix.ts consome a fila de dados num canal e, num segundo canal, escuta só a sua routing key control.<consumerId>.* na exchange control.bus

  3. 03

    O api_control.ts (painel interno Elysia) traduz as chamadas do operador em comandos no canal de controle: pause, resume, log-level-set

  4. 04

    pause/resume cancelam e recriam a assinatura da fila de dados (channel.cancel/channel.consume) — as transações acumulam na fila, sem perda

  5. 05

    status-get é RPC sobre AMQP (replyTo + correlationId); sem resposta no prazo, o painel devolve 504 — consumer mudo no controle é tratado como parado nos dados

  6. 06

    O demo.ts sobe os três processos, pausa o consumer, mostra o status parado respondendo pelo canal de controle, eleva o log e retoma

apps/messaging-streaming/control-bus

8 arquivos

src/

  • topology_control.tsExchanges pix.data e control.bus, routing key de controle, formato dos comandos e publicação confirmada
  • config_control.tsVariáveis de ambiente validadas no boot
  • producer_pix.tsPublica transações PIX no canal de dados; toda décima vem de conta bloqueada
  • consumer_pix.tsConsome o canal de dados e obedece a pause/resume/log-level-set/status-get do canal de controle
  • api_control.tsPainel interno Elysia: comandos por HTTP e status por RPC, com 504 no timeout
  • consumer_pix.test.tstesteIntegração com RabbitMQ real: pausa sem perda, isolamento por instância, RPC de status, timeout e separação dos canais
  • demo.tsdemoSobe os três processos e executa a janela de manutenção

./

  • docker.shinfraSobe o RabbitMQ 3 na porta 5672

Executar · com Docker

  1. ./docker.sh up# sobe RabbitMQ
  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
  6. bun run producer
  7. bun run consumer
  8. bun run api
  9. curl -X POST localhost:8116/consumers/pix-consumer-1/pause
  10. curl localhost:8116/consumers/pix-consumer-1/status
  11. curl -X POST localhost:8116/consumers/pix-consumer-1/resume

Cada papel também roda isolado, em terminais separados:

Requisitos
BunDocker
Sobe junto
RabbitMQ

Por que se relacionam

Teste rápido

Qual destes combina com Control Bus?

Próximo projeto · Comunicação & MensageriaMessage History
Esc

↑ ↓ navegarEnter abrir191 resultados