Este projeto é uma simulação de um ambiente de Dungeons & Dragons (D&D), implementada através de uma arquitetura de microserviços utilizando Quarkus. O projeto é dividido em diferentes serviços, cada um responsável por uma funcionalidade específica dentro do universo do jogo.
- Monster Service: Este serviço gerencia as entidades "monstros" do jogo. É possível criar, atualizar, recuperar e deletar monstros, além de interagir com eles. Cada monstro tem atributos como vida, força, entre outros, que são persistentes e gerenciados pelo serviço.
- Hero Service: Similar ao Monster Service, este serviço lida com as entidades "heróis". Os heróis podem interagir com os monstros, participando de combates e aventuras.
- Adventure Controller: É o ponto central das interações entre heróis e monstros. Permite inspecionar monstros e simular combates entre heróis e monstros, com os resultados dessas lutas afetando o estado persistente das entidades envolvidas.
Os serviços comunicam-se entre si para realizar as operações. Por exemplo, durante uma luta, o Adventure Controller consulta o Monster Service e o Hero Service para obter informações sobre os participantes e, em seguida, processa o resultado da luta, atualizando o estado dos envolvidos.
Os dados de heróis e monstros são persistentemente armazenados, permitindo que o estado das entidades seja mantido entre as sessões de jogo. Isso inclui, por exemplo, a vida de um monstro após uma luta.
git clone https://github.com/carlosarraes/dndmcr.git
Navegue até a pasta de cada serviço e construa-os individualmente. Por exemplo, para o serviço de monstros:
cd monster
./mvnw package -Pnative -DskipTests
# Se estiver com limitações de memória RAM, utilize a construção via Docker:
./mvnw package -Pnative -Dquarkus.native.container-build=true -DskipTests
Repita este processo para o hero-service:
cd ../hero
./mvnw package -Pnative -DskipTests
# Com Docker, se necessário:
./mvnw package -Pnative -Dquarkus.native.container-build=true -DskipTests
docker-compose up -d --build
curl --request PUT --data @hero-service.json http://localhost:8500/v1/agent/service/register
curl --request PUT --data @monster-service.json http://localhost:8500/v1/agent/service/register
Com o projeto rodando, você pode acessar os endpoints utilizando ferramentas como Postman, Insomnia ou HTTPie.
-
Obter Todos os Monstros
- Método: GET
- Caminho: /monster
- Descrição: Recupera uma lista de todas as entidades de monstros.
-
Obter Monstro por ID
- Método: GET
- Caminho: /monster/{id}
- Descrição: Recupera uma entidade específica de monstro pelo seu ID.
-
Criar um Novo Monstro
- Método: POST
- Caminho: /monster
- Descrição: Cria uma nova entidade de monstro.
-
Atualizar um Monstro
- Método: PUT
- Caminho: /monster/{id}
- Descrição: Atualiza uma entidade de monstro existente.
-
Deletar um Monstro
- Método: DELETE
- Caminho: /monster/{id}
- Descrição: Deleta uma entidade de monstro pelo seu ID.
-
Obter Todos os Heróis
- Método: GET
- Caminho: /hero
- Descrição: Recupera uma lista de todas as entidades de heróis.
-
Obter Herói por ID
- Método: GET
- Caminho: /hero/{id}
- Descrição: Recupera uma entidade específica de herói pelo seu ID.
-
Criar um Novo Herói
- Método: POST
- Caminho: /hero
- Descrição: Cria uma nova entidade de herói.
-
Atualizar um Herói
- Método: PUT
- Caminho: /hero/{id}
- Descrição: Atualiza uma entidade de herói existente.
-
Deletar um Herói
- Método: DELETE
- Caminho: /hero/{id}
- Descrição: Deleta uma entidade de herói pelo seu ID.
-
Inspecionar Monstro
- Método: GET
- Caminho: /adventure/inspect/{id}
- Descrição: Permite inspecionar um monstro pelo seu ID.
- Parâmetros do Caminho:
- id: O ID do monstro a ser inspecionado.
- Resposta: Um objeto Monster se encontrado, caso contrário, um erro 404.
-
Luta entre Herói e Monstro
- Método: GET
- Caminho: /adventure/fight/{hero_id}/{monster_id}
- Descrição: Inicia uma luta entre um herói e um monstro.
- Parâmetros do Caminho:
- hero_id: O ID do herói participante da luta.
- monster_id: O ID do monstro participante da luta.
- Resposta: Um mapa Map<String, String> representando o resultado da luta se bem-sucedida; caso contrário, um erro 404.
O Consul é utilizado primariamente para o service discovery no projeto, facilitando a comunicação e descoberta de serviços na rede de microserviços.
- Service Discovery: Acesse a interface do usuário do Consul para visualizar os serviços registrados e suas respectivas informações de saúde através do endereço: http://localhost:8500/ui/
- Tracing com @Traced: Este projeto utiliza a anotação @Traced do MicroProfile para habilitar o tracing distribuído nos serviços. Isso permite monitorar o fluxo das requisições e identificar potenciais gargalos ou problemas. Embora o Consul não forneça visualização direta de traces, as informações de tracing podem ser observadas nos logs dos containers.
- Para visualizar os logs que incluem informações de tracing, você pode usar os comandos do Docker para cada serviço. Por exemplo:
- Para o serviço de monstros:
docker logs monster-service
- Para o serviço de heróis:
docker logs hero-service
- Para o serviço de monstros:
- Para visualizar os logs que incluem informações de tracing, você pode usar os comandos do Docker para cada serviço. Por exemplo: