GabeOP / springboot-microservices-ecommerce

Backend project of a simplified e-commerce, which contains only Product and Cart and uses microservice architecture

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Descrição

Um projeto com objetivo de estudos baseado na arquitetura de microserviços, onde cada um é organizado usando arquitetura em camadas. A comunicação é síncrona, ou seja, comunicam-se através de requisições HTTP.

A ideia foi criar 2 microserviços: Produto e Carrinho.

  • No serviço de Produto, encontra-se um banco de dados onde são armazenados diferentes produtos com seus respectivos preços e quantidade em estoque. Além de possuir uma API para a comunicação.
  • No serviço de Carrinho, temos os modelos Cart e Item. "Cart" representa um carrinho de compras que possui uma lista de itens como atributo. "Item" representa um item que será adicionado ao carrinho, contendo os atributos nome, preço unitário e quantidade.

Análise técnica

Comunicação

Para facilitar a comunicação entre os microserviços, usei diversas ferramentas. Entre elas estão:

  • API Gateway ➡️ É nele que chegam todas as requisições e é a partir dele que elas são distribuídas. Ele determina para qual serviço a requisição será encaminhada. Pode também fazer autenticações, autorizações para que centralize a lógica e responsabilidades comuns. Além de ter outros papéis, facilita a manutenção e escabilidade do sistema.

  • Discovery server (Netflix Eureka) ➡️ É onde cada microserviço estará registrado e poderá se comunicar com diversos outros utilizando apenas o nome. Não será necessário saber o endereço e a porta em que estão rodando, o Eureka irá cuidar dessa parte. (Por padrão, é usado a porta 8765)

    O Eureka Server também se encarrega de realizar o balanceamento de carga, equilibrando o volume de requisições para aquele projeto que está instanciado mais de uma vez.

Endpoints

Possui diversos endpoints que podem ser importados para o postman usando o arquivo JSON disponibilizado no repositório. Como o sistema usa Eureka server, todos os endpoints possuem o mesmo localhost (http://localhost:8765)

  • GET (/ms-cart/cart) ➡️ Responsável por mostrar todos os itens dentro do carrinho, bem como o valor unitário e quantidade.

  • POST (/ms-cart/cart) ➡️ Através do body, adiciona um item ao carrinho. Antes é feita a comunicação com o serviço de Produto para verificar a existencia do produto e se há estoque disponível.

  • GET (/ms-cart/cart/total) ➡️ Responsável por somar o valor total que há no carrinho (quantidade * valor de cada item).

  • GET (/ms-product/product) ➡️ Responsável por mostrar todos os produtos cadastrados, bem como o valor do produto e quantidade em estoque.

Considerações finais

Graças a esse projeto, aprendi muito e pude desenvolver conhecimentos sobre a comunicação síncrona entre microserviços, uso do IntelliJ e Maven, POO, Java 8 (Streams, Lambda)

Vou ficar feliz em receber alguma mensagem com feedbacks sobre o projeto. Se você perceber que errei em alguma coisa, que poderia melhorar em determinadas partes do código, por favor me manda uma mensagem, seria ótimo pro meu aprendizado!

About

Backend project of a simplified e-commerce, which contains only Product and Cart and uses microservice architecture


Languages

Language:Java 100.0%