Pular para o conteúdo

apps/messaging-streaming/request-response

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

Request-Response

Padrão RPC sobre mensageria: o cliente envia uma requisição e bloqueia aguardando a resposta, usando uma fila exclusiva temporária e correlationId para correlacionar pares de mensagens.

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

Cenário

O portal do banco precisa do saldo antes de montar a tela. Em vez de chamar o serviço de saldos por HTTP, pergunta pelo RabbitMQ e espera a resposta: vários servidores de saldo dividem a fila de consultas e o portal faz várias consultas em paralelo por uma única fila de resposta.

Planta

Sequência
6/6
ACC-1001 replyTo=R correlationId=a1 expiration=20001ACC-2002 replyTo=R correlationId=b2 expiration=20002ACC-10013ACC-20024saldo, correlationId=b25saldo, correlationId=a16cada resposta volta ao pedido dono do correlationIdPortal (cliente RPC)fila balance-queryserver-1server-2fila de resposta exclusiva do portal
6

6 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Pergunta e aguarda a resposta.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    O cliente abre uma vez uma fila de resposta exclusive e autoDelete — some junto com ele, não vaza no broker

  2. 02

    Cada consulta vai para balance-query com replyTo, um correlationId novo e expiration igual ao timeout do cliente

  3. 03

    Os servidores competem pela fila, montam a resposta e publicam em replyTo ecoando o correlationId

  4. 04

    O cliente casa cada resposta com o pedido pendente pelo correlationId; resposta atrasada de pedido que já expirou é descartada

  5. 05

    Conta inexistente volta como resposta de erro — silêncio deixaria o cliente esperando o timeout

  6. 06

    Sem servidor, o cliente recebe ErrorRpcTimeout e o pedido expira na fila: ninguém processa depois uma consulta que ninguém mais espera

apps/messaging-streaming/request-response

6 arquivos

src/

  • client_balance.tsCliente RPC: fila de resposta única, pendências por correlationId, timeout e expiration
  • server_balance.tsServidor de saldos que responde em replyTo, inclusive com erro
  • config_balance.tsVariáveis de ambiente validadas no boot
  • client_balance.test.tstesteIntegração com RabbitMQ real: ida e volta, 30 pedidos concorrentes, erro de conta, timeout sem servidor e servidores concorrentes
  • demo.tsdemoQuatro consultas paralelas com dois servidores e o timeout com os servidores parados

./

  • 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 Request–Response?

Próximo projeto · Comunicação & MensageriaPoint-to-Point
Esc

↑ ↓ navegarEnter abrir191 resultados