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
- Host: GitHub
- URL: https://github.com/leoviana00/lab-communication-ms-rabbit
- Owner: leoviana00
- License: mit
- Created: 2024-07-13T23:35:36.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-08-19T12:10:31.000Z (8 months ago)
- Last Synced: 2025-01-25T10:11:20.600Z (3 months ago)
- Topics: amqp, docker, java, jwt, microservices, mongodb, nodejs, postgresql, rabbitmq, spring-boot, springdata-jpa
- Language: Java
- Homepage:
- Size: 206 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Comunicação entre microsserviços
![]()
![]()
Projeto |
Arquitetura |
Tecnologias |
Roadmap |
Referências
![]()
## 💡 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
![]()
## ✨ 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/)