Este projeto é um sistema de pedidos distribuído, construído com arquitetura de microserviços utilizando Spring Boot, RabbitMQ para mensageria e PostgreSQL como base de dados. Cada serviço tem uma responsabilidade única no fluxo de criação e processamento de pedidos.
A [Cliente Frontend ou API] -->|POST /pedidos| B[ms-fiap-receiver]
B -->|Publica mensagem| C[RabbitMQ]
C --> D[ms-pedido-service]
D -->|GET SKU| E[ms-produto-service]
D -->|GET Cliente| F[ms-cliente-service]
D -->|POST Estoque| G[ms-estoque-service]
D -->|POST Pagamento| H[ms-pagamento-service]
H -->|Webhook| D
- Requisição Inicial: Envia um
POST
para oms-fiap-receiver
. - RabbitMQ: Mensagem é publicada em um tópico.
- Processamento:
- Recupera informações do produto (
ms-produto-service
).- Caso não encontre ➝
FECHADO_SEM_PRODUTO
- Caso não encontre ➝
- Recupera cliente (
ms-cliente-service
).- Caso não encontre ➝
FECHADO_SEM_CLIENTE
- Caso não encontre ➝
- Valida estoque (
ms-estoque-service
).- Caso não tenha ➝
FECHADO_SEM_ESTOQUE
- Caso não tenha ➝
- Efetua o pagamento (
ms-pagamento-service
)- Caso válido ➝
ABERTO
- Caso válido ➝
- Recupera informações do produto (
- Webhook de Pagamento:
- Se aprovado ➝
FECHADO_COM_SUCESSO
- Se recusado ➝ devolve estoque e ➝
FECHADO_SEM_CREDITO
- Se aprovado ➝
- Docker
- Docker Compose
- Arquivo para execução do Docker Compose, disponível neste link
docker compose -p fiap-pedido up --build
Serviço | Porta App | Banco | Porta DB | Porta AMQP |
---|---|---|---|---|
ms-fiap-receiver | 8080 | — | — | — |
ms-pedido-service | 8081 | pedido | 5432 | — |
ms-produto-service | 8082 | produto | 5433 | — |
ms-cliente-service | 8083 | cliente | 5434 | — |
ms-estoque-service | 8084 | estoque | 5435 | — |
ms-pagamento-service | 8085 | pagamento | 5436 | — |
RabbitMQ | 15672 | — | — | 5672 |
POST http://localhost:8083/clientes
Content-Type: application/json
{
"nome": "Diego",
"email": "diego.cruz@fiap.com.br",
"endereco": "Rua jose, numero 10",
"telefone": "11911111111",
"dataNascimento": "1990-05-12",
"cpf": "123.123.123-84"
}
POST http://localhost:8082/produtos
Content-Type: application/json
{
"nome": "TV 26",
"descricao": "TV vermelha",
"preco": 1000.00
}
POST http://localhost:8084/estoques
Content-Type: application/json
{
"idProduto": 1,
"quantidade": 100
}
POST http://localhost:8080/pedidos
Content-Type: application/json
{
"idCliente": "c7c39150-58d1-4a9d-bbe6-0e9f6442775a",
"produtos": [
{
"sku": "PROD-643ROR",
"quantidade": 2
}
],
"pagamento": {
"numeroCartao": "123",
"cvv": "123",
"dataVencimento": "05/2030"
}
}
PUT http://localhost:8085/pagamentos/{id-pagamento}
Esse endpoint é chamado por um sistema externo para informar que o status do pagamento está disponível. O ms-pagamento-service
busca o status e informa o ms-pedido-service
.
Status | Significado |
---|---|
ABERTO |
Pedido criado, aguardando pagamento |
FECHADO_COM_SUCESSO |
Pedido finalizado com sucesso |
FECHADO_SEM_PRODUTO |
SKU(s) não encontrados |
FECHADO_SEM_CLIENTE |
Cliente não encontrado |
FECHADO_SEM_ESTOQUE |
Estoque insuficiente |
FECHADO_SEM_CREDITO |
Pagamento recusado, estoque devolvido |
- Java 21 + Spring Boot
- RabbitMQ (mensageria)
- PostgreSQL (banco de dados por microserviço)
- Docker e Docker Compose
- URL: http://localhost:15672
- Usuário:
fiap
- Senha:
fiap
Projeto desenvolvido como parte de estudos da disciplina de arquitetura de sistemas da FIAP.
Desenvolvido por Alan Araújo, Diego Cruz, Guilherme Reis e João Victor.