An open API service indexing awesome lists of open source software.

https://github.com/leoviana00/lab-communication-ms-rabbit

Microservices architecture. Practical laboratory simulating synchronous communication through HTTP and asynchronous calls using the RabbitMQ messaging service
https://github.com/leoviana00/lab-communication-ms-rabbit

amqp docker java jwt microservices mongodb nodejs postgresql rabbitmq spring-boot springdata-jpa

Last synced: about 1 month ago
JSON representation

Microservices architecture. Practical laboratory simulating synchronous communication through HTTP and asynchronous calls using the RabbitMQ messaging service

Awesome Lists containing this project

README

        

Comunicação entre microsserviços


Microsserviços
License


Projeto   |   
Arquitetura   |   
Tecnologias   |   
Roadmap   |   
Referências


Microsserviços

## 💡 Projeto
- Objetivo do projeto: Praticar e entender os conceitos da comunicação entre microsserviços através de uma simulação de um pequeno sistema de vendas;

- Requisitos:
- Toda vez que uma venda for realizada o estoque deve ser atualizado;
- API de vendas deve enviar uma menssagem (comunicação assíncrona) para a API de produtos para realizar essa atualização;
- Toda vez que for realizar uma venda, a API de vendas precisa ter informações dos produtos que estão no carrinho de compras;
- Pra isso a API de vendas irá requisitar (comunicação síncrona) para a API de produtos os dados dos Ids dos produtos que constam no carrinho de compras;
- Após a API produto receber uma mensagem (comunicação assíncrona) da API de venda para que o estoque seja atualizado, uma outra mensagem (comunicação assíncrona) deve ser retornada para a API de vendas informando se tudo ocorreu bem ou não para assim atualizar o status para compra CANCELADA ou CONCLUÍDA.
- Situação exemplo: O fluxo do processo de venda ficara como pendente até a API produto consumir a fila com informações da venda e iniciar o processo de atualização do estoque. Caso seja solicitado a venda de 2 itens do produto "A" e em estoque conter 5 itens dele, uma mensagem deve ser retornada a API de vendas com o Status CONCLUÍDO, porém, caso seja solicitado 2 itens do produto "B" e em estoque constar apenas 1, uma mensagem de CANCELADA deve retornar a API de vendas;
- Escopo:
- Uma API desenvolvida em NodeJS - (api-auth);
- Gerar um token de acesso para ser utilizado em todas as outras aplicações;
- Uma API de vendas desenvolvida em NodeJS - (api-sales)
- Responsávél por registrar as vendas;
- Irá enviar e receber mensagens na fila;
- Uma API produto desenvolvida em Java com Springbott
- Responsável de cuidar do estoque dos produtos;
- Irá enviar e receber mensagens na fila;
- Um RabbitMQ Server;
- Serviço de mensageria;
- Um Databases PostgreSQL
- Para api-auth
- Um Databases PostgreSQL
- Para api-produto
- Um Database MongoDB
- Para api-sales
- Conteinerização de todos os serviços;
- As chamadas HTTP (síncronas) entre as APIs devem ser protegidas por um tokem JWT que será gerado pela API NodeJS (api-auth);

## 💡 Arquitetura

- Diagrama da arquitetura


Microsserviços

## ✨ Tecnologias

- API REST
- Java e Springboot
- PostgreSQL
- NodeJS
- Express.js
- MongoDB
- RabbitMQ
- Docker
- Docker-compose

## 👣 Roadmap

## 📄 Referências

- [API Rest](https://restfulapi.net/)
- [Microsserviços com Springboot](https://spring.io/blog/2015/07/14/microservices-with-spring)
- [Microsevices](https://spring.io/microservices)
- [Maven Plugin](https://docs.spring.io/spring-boot/docs/1.5.16.RELEASE/reference/html/using-boot-running-your-application.html)
- [Compreendendo a Comunicação Síncrona e Assíncrona entre Microsserviços](https://medium.com/@vitormoschetta/compreendendo-a-comunica%C3%A7%C3%A3o-s%C3%ADncrona-e-ass%C3%ADncrona-em-desenvolvimento-de-software-809d1f635d1b)
- [Yarn](https://classic.yarnpkg.com/en/docs/install#debian-stable)
- [RabbitMQ](https://www.rabbitmq.com/docs)
- [Docker](https://docs.docker.com/guides/)
- [Docker Compose](https://docs.docker.com/compose/compose-application-model/)
- [Mongo docker](https://hub.docker.com/_/mongo)
- [PostgreSQL docker](https://hub.docker.com/_/postgres)
- [Rabbit docker](https://hub.docker.com/_/rabbitmq)
- [NodeJS](https://nodejs.org/docs/latest/api/)