PROJETOS Voltar para home
Ver todos os projetos

Warehouse Microservice

Microsserviço de gerenciamento de estoque com processamento assíncrono e sincronização em tempo real via RabbitMQ.

Sobre o Projeto

O Warehouse Microservice é um sistema de retaguarda focado no gerenciamento de estoque que criei para fazer parte de uma arquitetura distribuída de e-commerce. O propósito do projeto foi resolver o problema de acoplamento rígido entre sistemas de catálogo e inventário.

Antes desse modelo de microsserviço assíncrono, qualquer oscilação na consulta de produtos afetava diretamente o fechamento de pedidos. Com esta solução, descentralizei as responsabilidades, permitindo que o estoque processe alterações de status de forma isolada, garantindo que a vitrine continue funcionando normalmente mesmo sob alta demanda de acessos.

Arquitetura e Decisões Técnicas

Desenhei a estrutura do projeto separando claramente as responsabilidades em camadas bem definidas (Controller → Service → Repository). Busquei ferramentas modernas que evitassem códigos repetitivos e facilitassem a manutenção individual do software:

Tecnologias Aplicadas e Decisões
RabbitMQ

Adotei como broker de mensageria assíncrona para permitir a comunicação entre microsserviços sem travar ou sobrecarregar a linha principal de compra.

MapStruct

Implementei para realizar o mapeamento automático entre as entidades do banco e os DTOs de forma limpa, eliminando código repetitivo manualmente.

Desafios e Soluções de Engenharia

Durante a codificação da mensageria, foquei em garantir que o microsserviço conseguisse receber dados externos e interpretar os estados de disponibilidade sem gerar inconsistências na persistência.

Desafios Resolvidos

Desafio 1: Acoplamento e Bloqueio de Fluxo

Sincronização de estoque sem indisponibilizar o sistema

Problema

Em arquiteturas de e-commerce, se a atualização de estoque depender de chamadas HTTP diretas e síncronas, o sistema pode ficar lento ou cair caso um dos serviços falhe.

Solução Aplicada

Desenvolvi um listener assíncrono conectado à fila 'product.change.availability.queue'. Configurando o Jackson2JsonMessageConverter, passei a consumir os eventos de alteração de status em segundo plano, atualizando o banco via JPA sem travar a experiência do usuário.

Impacto e Resultados

Até o momento, não configurei ferramentas de métricas de infraestrutura (como Prometheus) ou testes de carga automatizados neste repositório. Contudo, os resultados técnicos e qualitativos obtidos com o desenvolvimento isolado foram:

  • Redução de Boilerplate: Com o uso conjunto de Lombok e MapStruct, reduzi drasticamente a necessidade de escrever getters, setters e métodos de conversão de dados na mão, focando apenas na lógica do estoque.
  • Onboarding Simplificado: Configurei o projeto utilizando o Gradle Wrapper e banco em memória H2, o que permite clonar o repositório e rodar a aplicação imediatamente com comandos simples, sem burocracia de banco local.