Este repositório possui um conjunto de microsserviços com o objetivo de representar o fluxo simplificado de um sistema de reserva de
quartos de hotel como, por exemplo, o booking.com
.
Para isso a aplicação, foi dividida em 4 microsserviços e um módulo compartilhado entre esses serviços afim de evitar duplicação de código.
Tecnologia | Versão |
---|---|
Docker | 24.0.5, build ced0996 |
Java | OpenJDK 21 |
Maven | 3.9.2 |
Spring Boot | 3.1.3 |
MySQL | 8.0.33 |
RabbitMQ | 3-management |
As credenciais de acesso e portas podem ser alteradas através das variáveis de ambiente definidas no arquivo .env
e nas variáveis do arquivo
common.yml
e services.yml
.
Tipo | Porta | Serviço | Usuário | Senha |
---|---|---|---|---|
MySQL | 3311 | hotel-db | user | password |
MySQL | 3312 | booking-db | user | password |
MySQL | 3313 | customer-db | user | password |
RabbitMQ | 5672, 25676, 15672 | hotel-booking-system-queue | root | root |
Exchange | Routing Key | Fila |
---|---|---|
exchange.booking-room | routing-key.booking-room-requested | booking-room-requested |
exchange.booking-room | routing-key.booking-room-confirmation | booking-room-confirmation |
exchange.booking-room | routing-key.booking-room-status-changed | booking-room-status-changed |
exchange.payment | routing-key.payment-request | payment-request |
exchange.payment | routing-key.payment-confirmation | payment-confirmation |
exchange.customer-booking | routing-key.customer-booking-update | customer-booking-update |
Microsserviço | Porta Padrão | API URL |
---|---|---|
Hotel Service | 8001 | ${baseUrl}/hotel-service |
Booking Service | 8002 | ${baseUrl}/booking-service |
Payment Service | 8003 | - |
Customer Service | 8004 | ${baseUrl}/customer-service |
Este serviço possui os endpoints para executar ações como a reserva de um quarto de hotel, criação de um hotel e
consulta dos quartos de hotel disponíveis. Ainda, se comunica com os outros três serviços através das filas do RabbitMQ
.
Este serviço recebe mensagens vindas do Hotel
e tem como responsabilidade gerenciar as reservas feitas pelo cliente armazenando as datas
da reserva relacionadas ao quarto de hotel.
Este serviço atua como um sistema de pagamento fake simulando a tentativa de pagamento e verificação de saldo notificando o serviço de Hotel
sobre o sucesso ou falha do pagamento através do RabbitMQ
.
Este serviço contém informações sobre os agendamentos do cliente (customer
) sendo atualizado a cada alteração no fluxo da reserva do quarto e
expondo endpoints para consultar a situação atual do agendamento do cliente.
Certifique-se de executar os passos abaixo na ordem correta e ter as ferramentas apresentadas instaladas em seu sistema antes de prosseguir com a execução a da aplicação.
- Docker
- Para verificar se o docker foi instalado corretamente execute o comando
docker --version
- Para verificar se o docker foi instalado corretamente execute o comando
- Docker Compose
- Para verificar se o docker-compose foi instalado corretamente execute o comando
docker-compose --version
- Para verificar se o docker-compose foi instalado corretamente execute o comando
- Java
- Para verificar se o java foi instalado corretamente execute o comando
java --version
- A instalação do
jdk
naversão 21
só será necessária caso você deseje executar a aplicação localmente sem utilizar odocker
- Para verificar se o java foi instalado corretamente execute o comando
- Construa os volumes correspondentes para armazenamento de dados dos bancos de dados utilizando o comando:
docker volume create --name=hotel-db-volume --driver local --opt type=none --opt device=D:/opt/hotel-booking-system/hotel-db/mysql --opt o=bind
docker volume create --name=booking-db-volume --driver local --opt type=none --opt device=D:/opt/hotel-booking-system/booking-db/mysql --opt o=bind
docker volume create --name=customer-db-volume --driver local --opt type=none --opt device=D:/opt/hotel-booking-system/customer-db/mysql --opt o=bind
-
Após isso é possível iniciar todos os serviços e aplicações auxiliares como banco de dados e filas executando o comando abaixo dentro da pasta
docker
. -
O parâmetro
--build
irá construir as imagens dos microsserviços antes de iniciar os containeres. -
A especificação dessas imagens está definida no arquivos arquivos com extensão
*.dockerfile
localizados em${projeto}/docker/dockerfile
docker-compose -p hotel-booking-system -f common.yml -f services.yml up -d
- Para derrubar os contêineres execute o comando abaixo:
docker-compose -p hotel-booking-system down
- Para apagar todos os volumes locais de dados execute o comando abaixo:
docker volume rm $(docker volume ls -q)
- Para realizar os testes é possível utilizar o postman como cliente http e importar a collection localizada em
${projeto}/postman
.