Autor | Sobre | Tecnologias | Aplicação
Palavras-Chave: Microsserviços, Docker, Apache Kafka, Arquitetura Orientada a Serviços, Arquitetura Orientada a Eventos, GraphQL.
As seguintes ferramentas, linguagens, bibliotecas e tecnologias foram usadas na construção do projeto:
- Java: Linguagem utilizada no desenvolvimento de todos os serviços.
- Hibernate: ORM para mapeamento dos modelos para o banco de dados.
- Maven: Gerenciamento de dependências.
- H2: Banco de dados durante desenvolvimento dos serviços.
- MariaDB: Banco de dados para a versão final do projeto.
- Docker: Conteinerização para a execução dos microsserviços.
- Liquibase: Migração de banco de dados.
- Apache Kafka: Mensageria para arquitetura orientada a eventos.
- GraphQL: Linguagem de consulta para APIs utilizada no desenvolvimento da maior parte dos microsserviços deste projeto.
- Git: Versionamento do código
- GitHub: Armazenamento do código
- Postman: Testes de chamadas para as APIs
- O serviço 'User' armazena informações do perfil do usuário do sistema como nome, documento, endereços e formas de contato.
- O serviço 'Store' armazena dados dos produtos disponíveis para compra, seus valores e detalhes para exibição do catálogo.
- O serviço 'Order' armazena informações do carrinho de compras do usuário como produtos escolhidos e seus valores.
- O serviço 'Payment' armazena dados de pagamento do usuário. Possui uma cópia dos dados importatnes para compra e dados como cartão de crédito e pedido a ser pago.
- A API Gateway recebe as requisições de outras APIs ou de aplicações frontend e direciona para os microsserviços responsáveis pela operação desejada.
Depois de baixar o Docker e clonar o repositório (ou baixá-lo):
# Execute o comando do docker compose para a
# montagem das imagens de cada microsserviço e instalação das dependências
docker compose up
# A API estará disponível pelo endereço: http://localhost:8079/Para testar as requisições para as APIs, é aconselhável o uso do Postman, com a ajuda da collection disponibilizada pelo autor.
Primeiro, baixe o arquivo e importe no Postman.
Para importar a collection no Postman, clique em "import":
Uma janela com opções se abrirá. Clique em "Upload Files" e escolha o arquivo disponibilizado.
A seguir estão alguns exemplos de interações dos eventos Kafka com os serviços que compõem o sistema.
Após criação de um usuário, o serviço de usuários envia uma mensagem para o tópico Kafka "USER_CREATED".
- Criando usuário:
- Enviando evento "USER_CREATED":
O evento é recebido pelo serviço de pagamentos e os dados criados no usuário são replicados para a entidadee chamada customer.
- Recebendo evento "USER_CREATED":
- Dados replicados para o serviço de Pagamentos pelo evento "USER_CREATED":
Na criação do endereço, é seguido o mesmo comportamento. O evento "ADDRESS_CREATED" é enviado pelo serviço de usuário.
- Criando Endereço:
- Enviando evento "ADDRESS_CREATED":
O evento é recebido pelo serviço de pagamentos e o endereço é replicado para o customer previamente cadastrado.
- Recebendo evento "ADDRESS_CREATED":
- Dados replicados pelo evento "ADDRESS_CREATED":
A exclusão dos dados também envia uma mensagem para o kafka. O serviço de usuário envia o id do endereço excluído para o tópico kafka "ADDRESS_DELETED".
- Excluíndo endereço e validando dados excluidos pelo evento "ADDRESS_DELETED":
- Enviando evento de exclusão de endereço "ADDRESS_DELETED":
Assim que a mensagem é consumida, o serviço de pagamentos exclui também o endereço previamente cadastrado.
- Recebendo evento de exclusão de endereço "ADDRESS_DELETED":
Para a exemplificar uma compra no sitema, alguns produtos são cadastrados e um carrinho de compras é criado. Após criação do carrinho, o serviço de pedido envia uma mensagem ao tópico kafka "ORDER_STARTED".
- Criando produtos:
- Criando carrinho de compras:
- Enviando evento "ORDER_STARTED":
O serviço de loja recebe a mensagem do tópico "ORDER_STARTED" e altera a quantidade disponível dos produtos contidos no carrinho de compras iniciado, indisponibilizando parte dos produtos até que o pagamento da compra seja efetivado.
- Recebendo evento "ORDER_STARTED" na loja:
- Dados alterados pelo evento "ORDER_STARTED" na loja:
O serviço de pagamento recebe a mensagem do tópico "ORDER_STARTED" e replica as informações contidas no carrinho iniciado para um novo pedido a ser pago.
- Recebendo evento "ORDER_STARTED" no pagamento:
- Dados replicados pelo evento "ORDER_STARTED" no pagamento:
Neste momento, um cartão é criado para pagamento do pedido.
- Criando cartão para pagamentos:
Após criação do método de pagamento, o pedido é pago e uma mensagem é enviada ao tópico "ORDER_PAID" pelo serviço de pagamentos.
- Pagando pedido:
- Enviando evento "ORDER_PAID":
O serviço de pedidos recebe a mensagem do tópico "ORDER_PAID" e envia uma mensagem no tópico "CART_PAID" para alterações no estoque do serviço de loja.
- Recebendo evento "ORDER_PAID" e enviando evento "CART_PAID" no serviço de pedidos:
- Pedido pago e com status alterado no serviço de pagamentos:
- Evento "ORDER_PAID" replicando para o serviço de pedidos, mudando status do carrinho de compras previamente criado:
A mensagem do tópico "CART_PAID" é recebida pelo serviço de loja e o serviço remove a quantidade disponível dos produtos do carrinho, efetivando a remoção deles no estoque da loja.
- Recebendo mensagem do tópico "CART_PAID" no serviço de loja:
- Dados alterados pelo evento "CART_PAID" no serviço de loja:
LinkedIn
GitHub
Twitter


























