Serviço de notificações integrado ao finance-api via mensageria assíncrona com RabbitMQ.
O finance-notifications consome eventos de transações publicados pelo finance-api numa fila RabbitMQ e processa notificações em tempo real. A comunicação é totalmente assíncrona — o finance-api responde imediatamente ao cliente e o processamento da notificação acontece em paralelo, sem bloquear a requisição original.
- Java 21
- Spring Boot 3.5
- Spring AMQP (RabbitMQ)
- Spring Web
- Lombok
- Docker / Docker Compose
finance-api
↓ publica TransactionEvent
transactions.exchange (RabbitMQ)
↓ routing-key: transactions.created
transactions.queue
↓ consome
TransactionConsumer
↓
NotificationService → processa e loga a notificação
| Propriedade | Valor padrão |
|---|---|
| Exchange | transactions.exchange |
| Queue | transactions.queue |
| Routing Key | transactions.created |
- Java 21
- Docker
- finance-api rodando na porta 8080
1. Configure as variáveis de ambiente
Crie src/main/resources/application.properties baseado no application-example.properties:
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
rabbitmq.exchange=transactions.exchange
rabbitmq.queue=transactions.queue
rabbitmq.routing-key=transactions.created2. Suba o RabbitMQ via Docker
docker compose up -dPainel de gerenciamento disponível em http://localhost:15672 (guest/guest).
3. Suba a aplicação
./mvnw spring-boot:runA aplicação sobe na porta 8082 e começa a ouvir a fila automaticamente.
Com o finance-api e o finance-notifications rodando simultaneamente, crie uma transação no finance-api (POST /transactions). O finance-notifications vai consumir o evento e exibir a notificação no terminal:
=====================================
NOTIFICAÇÃO DE TRANSAÇÃO
=====================================
💰 Tipo : INCOME
📝 Descrição : Salário
💲 Valor : R$ 3500.00
📅 Data : 2026-06-26
🏷️ Categoria : Food
👤 Usuário : gui@email.com
🕐 Processado: 2026-06-26T20:46:40
=====================================
src/main/java/com/guilherme/finance_notifications/
├── config/ # RabbitMQConfig (exchange, queue, binding, converter)
├── consumer/ # TransactionConsumer (@RabbitListener)
├── dto/ # TransactionEvent
└── service/ # NotificationService