Pular para o conteúdo

apps/messaging-streaming/priority-queue

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

Priority Queue

Mensagens com prioridade mais alta são processadas primeiro, independentemente da ordem de chegada. O RabbitMQ mantém sub-filas internas por nível de prioridade e entrega sempre a mais alta disponível.

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

Cenário

O processador de pagamentos de um banco recebe ao mesmo tempo liquidações de câmbio, folha de pagamento, PIX emergenciais, pagamentos a fornecedores e boletos agendados. Num pico, câmbio e folha não podem esperar atrás de boletos que vencem daqui a semanas.

Planta

Fluxo
6/6
Produtorpayment-priorityx-max-priority=10Workerprefetch 1payment-priority-dlqcâmbio e folha: 10PIX emergencial: 7fornecedor: 5boleto agendado: 1maior prioridadeprimeiro, FIFOno empatenack sem requeue
6

6 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Urgente passa à frente da fila.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    A fila é declarada com x-max-priority: 10 e DLX — sem o argumento ela ignora qualquer prioridade e vira FIFO

  2. 02

    A prioridade sai do tipo do pagamento (PAYMENT_PRIORITY), nunca de um pedido do chamador

  3. 03

    Cada pagamento é publicado persistente, com priority e confirmação do broker

  4. 04

    O broker entrega primeiro a maior prioridade na fila; dentro da mesma prioridade, por ordem de chegada

  5. 05

    Prioridade acima do máximo declarado é tratada como o máximo — níveis acima de 10 se fundem

  6. 06

    O worker usa prefetch(1): com prefetch maior, pagamentos de baixa prioridade já estariam no buffer do consumidor quando um crítico chegasse

apps/messaging-streaming/priority-queue

6 arquivos

src/

  • queue_payment.tsFila com x-max-priority e DLX, prioridade por tipo e publicação confirmada
  • worker_payment.tsWorker com prefetch(1), ack após liquidar, ilegível para a DLQ
  • config_payment.tsVariáveis de ambiente validadas no boot
  • queue_payment.test.tstesteIntegração com RabbitMQ real: ordem por prioridade e FIFO no empate, teto do máximo, fila sem prioridade e DLQ
  • demo.tsdemoSeis pagamentos chegam fora de ordem e são liquidados por prioridade

./

  • 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
Requisitos
BunDocker
Sobe junto
RabbitMQ

Por que se relacionam

Teste rápido

Qual destes combina com Priority Queue?

Próximo projeto · Comunicação & MensageriaSplitter
Esc

↑ ↓ navegarEnter abrir191 resultados