event-ticket-distributed-app

event-ticket-distributed-app cover

Project Info

Technologies

Java
Spring Boot
RabbitMQ
MongoDB
Docker
AWS

Project Gallery

Cover

Cover

Descrição do Projeto

Descrição do Projeto

Visão Geral do Sistema

event‑ticket‑distributed‑app demonstra uma arquitetura orientada a eventos em que dois microsserviços Spring Boot cooperam para oferecer um fluxo completo de criação de eventos e venda de ingressos, tudo de forma assíncrona via RabbitMQ.

PapelServiçoPortaResponsabilidade
Gestão de Eventosevent‑manager8080CRUD de eventos; publica notificações quando um evento é criado/alterado.
Gestão de Ingressosticket‑manager8081CRUD de ingressos; valida vagas disponíveis, dispara mensagem de e‑mail de confirmação.

Diagrama de Arquitetura

Diagrama Arquitetural

Fluxo de Negócio

  1. Criar Evento: POST /create-event → event-manager salva o evento, publica mensagem EventoCriado no RabbitMQ.
  2. Sincronização Ticket‑manager: O ticket-manager consome EventoCriado, cria cache local (ou dispara busca lazily) para permitir venda de ingressos associada.
  3. Criar Ingresso: POST /create-ticket → ticket-manager valida evento/id, persiste ingresso e publica TicketCriado.
  4. Envio de E‑mail: Um consumer leve (EmailConsumer) escuta TicketCriado e envia mensagem de confirmação via SMTP/AWS SES.

Garantias

CamadaGarantia principal
RabbitMQEntrega pelo menos uma vez; filas duráveis.
ticket‑managerIdempotência opcional via ticketId para evitar criação duplicada em re‑delivery.
MongoDB AtlasReplicação nativa ― alta disponibilidade.

Camadas Internas

ServiçoStackOrganização interna
event‑managerSpring Web MVC, Spring Data MongoDBController → Service → Repository + Mapper (MapStruct)
ticket‑managerSpring Web, Spring AMQP, Spring DataController → Service → Repository; Listener separado para EventoCriado
EmailConsumerSpring Boot, Spring AMQP, JavaMailListener Rabbit → EmailService (Strategy para SMTP, SES, etc.)

Endpoints REST

event‑manager

MétodoRotaAção
POST/create-eventCriar evento
GET/get-event/{id}Buscar evento
GET/get-all-eventsListar todos
GET/get-all-events-sortedListar ordenado A→Z
PUT/update-event/{id}Atualizar
DELETE/delete-event/{id}Remover

ticket‑manager

MétodoRotaAção
POST/create-ticketCriar ingresso
GET/get-ticket/{id}Consultar
PUT/update-ticket/{id}Atualizar
DELETE/cancel-ticket/{id}Cancelar
GET/get-tickets-event/{eventId}Ingressos por evento

Tecnologias & Justificativa

CategoriaFerramentaMotivo
MensageriaRabbitMQ + Spring AMQPBroker leve, suporte a tópicos, fácil em Dev com imagem Docker.
PersistênciaMongoDB AtlasEsquema flexível para eventos/ingressos, replicação gerenciada.
BuildMavenConsistente com ecossistema Spring.
Infra como CódigoDocker ComposeReproduz ambiente local idêntico ao CI/CD.
ObservabilidadeMicrometer + Prometheus + GrafanaTrês pilares (métricas/logs/traces) prontos para produção.

Como foi feito o deploy

  • Ambiente local e CI: O comando docker-compose up --build inicializa RabbitMQ, ambos os microsserviços e conecta automaticamente ao MongoDB Atlas usando a string de conexão configurada. Isso garante que o ambiente de desenvolvimento seja idêntico ao de integração contínua.
  • Deploy em nuvem (AWS EC2): As imagens Docker são enviadas para o ECR (Elastic Container Registry) e uma instância EC2 executa o Docker Compose, orquestrando todos os serviços. O RabbitMQ pode ser migrado para Amazon MQ/ElasticMQ para maior resiliência, e o envio de e-mails utiliza o Amazon SES.
  • Escalabilidade: Cada microsserviço pode ser replicado de forma independente, permitindo que o RabbitMQ atue como buffer para picos de demanda e garantindo alta disponibilidade.