Skip to content

MarcosGabrielL/rabbitmq-processor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Processador de Pagamentos com RabbitMQ

Sistema distribuído de processamento de pagamentos com Spring Boot e RabbitMQ, implementando Dead Letter Queue (DLQ), retry manual com backoff e ACK manual.

📋 Índice

  • Arquitetura
  • Tecnologias
  • Estrutura do Projeto
  • Configuração RabbitMQ
  • Fluxo de Mensagens
  • Instalação e Execução
  • API Endpoints
  • Regras de Negócio
  • Mecanismo de Retry
  • Dead Letter Queue
  • Monitoramento
  • Testes
  • Troubleshooting

Arquitetura

flowchart LR
    A[Service A<br/>API REST :8081] -->|RabbitMQ Exchange| B[(RabbitMQ<br/>Topic Exchange)]
    B --> C[Service B<br/>Processor :8082]

    C -->|ACK OK| D[(Mensagem Consumida)]
    C -->|Falha após retries| E[(DLX<br/>Direct Exchange)]

    E --> F[Queue DLQ]
    F --> G[Service C<br/>DLQ Monitor :8083]
Loading

Tecnologias

Tecnologia Versão Finalidade
Java 17 Linguagem
Spring Boot 3.2.0 Framework
Spring AMQP 3.1.0 RabbitMQ integration
RabbitMQ 3.12 Message broker
Lombok 1.18.30 Boilerplate reduction
Jackson 2.15.3 JSON
Docker Compose 3.8 Infra
Maven 3.x Build

Estrutura do Projeto

rabbitmq-processor/
├── docker-compose.yml
├── pom.xml
├── common/
├── service-a/
├── service-b/
└── service-c/

Configuração RabbitMQ

Exchanges

Nome Tipo Binding
pedidos.novos TOPIC pagamento.processar
pedidos.dlx DIRECT pagamento.falhou

Queues

Fila DLX Retry
pagamento.fila pedidos.dlx 3 (manual)
pagamento.fila.dlq - -

Fluxo de Mensagens

1. Caminho Feliz (Sucesso)

sequenceDiagram
    participant A as Service A
    participant MQ as RabbitMQ
    participant B as Service B

    A->>MQ: Publica pagamento.processar
    MQ->>B: Entrega mensagem
    B->>B: Processa pagamento
    B->>MQ: basicAck()
    MQ-->>B: Mensagem removida
Loading

2. Retry (Falha temporária)

sequenceDiagram
    participant B as Service B
    participant MQ as Queue

    B->>MQ: Consome mensagem (tentativa 1)
    B->>MQ: Reject + requeue
    MQ->>B: Reentrega

    B->>MQ: Tentativa 2
    B->>MQ: Reject + requeue

    B->>MQ: Tentativa 3
    B->>MQ: ACK ou DLQ
Loading

3. Fluxo para DLQ

flowchart TD
    A[Service B consome mensagem]
    B{Falhou 3x?}
    C[Rejeita sem requeue]
    D[DLX recebe mensagem]
    E[DLQ: pagamento.fila.dlq]
    F[Service C processa erro]
    G[Log em payment_errors.log]

    A --> B
    B -- Não --> A
    B -- Sim --> C --> D --> E --> F --> G
Loading

Instalação e Execução

1. Subir RabbitMQ

docker-compose up -d

2. Build

mvn clean install -DskipTests

3. Rodar serviços

# Service A
mvn spring-boot:run

# Service B
mvn spring-boot:run

# Service C
mvn spring-boot:run

API Endpoints

POST /api/orders/process-payment

Campo Tipo Obrigatório
customerId String Sim
amount Decimal Sim
paymentMethod String Não
curl -X POST "http://localhost:8081/api/orders/process-payment?customerId=123&amount=100"

Regras de Negócio

Regra Resultado
amount > 10000 Rejeita
customerId termina 99 Rejeita
padrão 70% sucesso

Mecanismo de Retry

flowchart LR
    A[Recebe mensagem]
    B{Sucesso?}
    C[ACK]
    D{Retry < 3?}
    E[Reject + republish]
    F[DLQ]

    A --> B
    B -- Sim --> C
    B -- Não --> D
    D -- Sim --> E
    D -- Não --> F
Loading

Dead Letter Queue (DLQ)

flowchart LR
    A[pagamento.fila]
    B[pedidos.dlx]
    C[pagamento.fila.dlq]
    D[Service C Monitor]

    A --> B --> C --> D
Loading

Monitoramento


Testes

for i in {1..20}; do
  curl -X POST "http://localhost:8081/api/orders/process-payment?customerId=$i&amount=100" &
done

Troubleshooting

DLQ não recebendo mensagens

rabbitmqctl list_bindings | grep dlx

Filas travadas

rabbitmqctl purge_queue pagamento.fila

Performance

Métrica Valor
Throughput 50–100 msg/s
Latência < 200ms
Prefetch 1

Licença

MIT

About

Sistema distribuído de processamento de pagamentos com Spring Boot e RabbitMQ, utilizando retry manual, ACK manual e Dead Letter Queue (DLQ) para resiliência e tratamento de falhas.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages