Skip to content

Imovato/backend

Repository files navigation

🏠 Imovato

Bem-vindo ao nosso projeto de back-end de microsserviços com spring-boot e spring-cloud, para criar uma arquitetura escalável e altamente disponível.

Introdução

Há oito microsserviços, cada um com uma tarefa específica:

  • Discovery mantém o registro dos microsserviços disponíveis.
  • Gateway é o ponto de entrada para requisições do usuário.
  • Auth autentica usuários.
  • Payment processa pagamentos.
  • Rent gerencia aluguéis.
  • Scheduling agenda tarefas.
  • CrudService fornece operações básicas de CRUD.

Cada microsserviço pode ser desenvolvido, testado e implementado de forma independente, tornando o sistema mais flexível e fácil de manter.

Execução do projeto

1. Baixe e instale o MySQL, após isto necessário 6 bases de dados criadas

  • crud-service aquisition auth_db payment rent_db scheduling

2. Alternativa, executar o docker-compose-dev.yml, onde que contém o serviço do mysql

  • 1: Baixe e instale o Docker Desktop
  • 2: Inicie o Docker Desktop
  • 3: Abra o PowerShell, navegue até o diretório onde se encontra o projeto, por exemplo: C:user\documents\GitHub\backend
  • 4: Execute o docker-compose, com o comando
  • 5:
    docker-compose -f docker-compose-dev.yml up
    


    ➡️ Pode abrir o MySQL com HeidiSQL
    • 1: Baixe e instale o HeidiSQL
    • 2: Inicie o HeidiSQL e clique em "File" > "New Session" para criar uma nova conexão com o banco de dados.
    • Na tela de nova sessão, preencha os seguintes campos:
      • a: Hostname: localhost ou o endereço IP da máquina que está executando o serviço do Docker
      • b: User: o nome de usuário configurado para o serviço MySQL no arquivo docker-compose
      • c: Password: a senha configurada para o serviço MySQL no arquivo docker-compose
      • d: Port: a porta configurada para o serviço MySQL no arquivo docker-compose (padrão é 3306)
    • 3: Clique em "Open" para conectar ao banco de dados.

3. Fazer os cadastros das filas dos microsserviços no Rabbitmq

  • Para instalar o RabbitMQ no Windows, você precisa seguir os seguintes passos:
    • 1: Baixe e instale o Erlang para Windows na sua máquina: Erlang
    • 2: Baixe e instale o RabbitMQ para Windows na sua máquina: RabbitMQ
    • 3: Inicie o RabbitMQ Server na sua máquina.
    • 4: Abra o prompt de comando e use o seguinte comando para acessar o RabbitMQ Management:
      rabbitmq-plugins enable rabbitmq_management
      
    • 5: Acesse a interface web do RabbitMQ Management em seu navegador

➡️ Agora, para criar as filas na aplicação de cada microsserviço, você pode seguir os seguintes passos:

  • 1: Acesse a interface gráfica do RabbitMQ Management através do navegador.
  • 2: Faça login na plataforma, se necessário.
  • 3: Selecione a aba "Exchanges".
  • 4: Clique no nome do exchange definido no arquivo "application.yml" dos microsserviços, no exemplo "crud.exchange".
  • 5: Clique na aba "Bindings" e depois em "Add Binding".
  • 6: Selecione o tipo de exchange adequado, por exemplo "Direct" ou "Topic".
  • 7: No campo "Queue", selecione a fila que deseja adicionar ao exchange, por exemplo "auth.signup" ou "crud.acquisition.property".
  • 8: Preencha o campo "Routing Key" com a routing key definida no arquivo "application.yml" do microsserviço correspondente.
  • 9: Clique em "Add binding" para criar o binding entre o exchange e a fila.
  • 10: Repita os passos 5 a 9 para cada fila que deseja adicionar ao exchange, com suas respectivas routing keys e configurações, conforme especificado em cada arquivo "application.yml" dos microsserviços

Figura ilustrativa do funcionamento das Filas

template-method

👨🏻‍🏫 Tutorial da instalação do RabbitMQ: You Tube
👨🏻‍🏫 Tutorial de cadastro de fila no RabbitMQ: You Tube 1 ou You Tube 2

4. Alternativa executar o docker-compose-dev.yml, onde que contém o serviço do rabbitmq

  • 1: Inicie o Docker Desktop
  • 2: Abra o PowerShell, navegue até o diretório onde se encontra o projeto, por exemplo: C:user\documents\GitHuB\backend
  • 3: Execute o docker-compose, com o comando
  • 4:
    docker-compose -f docker-compose-dev.yml up
    
  • 5: Acesse a interface web do RabbitMQ Management em seu navegador
  • OBS: As Exchanges e Queues são criadas automáticas pelo arquivo de definições RabbitMQ Definitions

Dockerfile

O Dockerfile é um arquivo de configuração que permite que você crie uma imagem personalizada do Docker para sua aplicação.

  • O Dockerfile fornecido tem duas etapas (FROM) para criar uma imagem:
    • A primeira etapa usa a imagem do Maven para compilar o código-fonte da aplicação. Ele copia o arquivo pom.xml e o diretório src para um diretório de trabalho no container, em seguida, executa o comando 'mvn package' para criar o arquivo jar.
    • A segunda etapa usa a imagem do OpenJDK para criar um container que executará a aplicação. Ele copia o arquivo jar criado na primeira etapa para a imagem final e define a porta em que a aplicação estará em execução. Em seguida, define o comando de entrada para iniciar a aplicação no container, especificando o perfil 'docker-demo'.

O Dockerfile permite criar uma imagem que encapsula todas as dependências necessárias e configurações para executar a aplicação, o que facilita a implantação e o gerenciamento da aplicação em diferentes ambientes.

Docker-compose

  • 1: O arquivo docker-compose-dev.yml contém a definição dos serviços MySQL e RabbitMQ para o ambiente de desenvolvimento. Esses serviços são executados como contêineres do Docker e podem ser gerenciados por meio desse arquivo.
  • 2: O arquivo docker-compose-sonar.yml define a configuração do SonarQube e sua base de dados correspondente. O SonarQube é uma ferramenta de análise de código aberto que ajuda a detectar problemas de qualidade de código.
  • 3: O arquivo docker-compose-deploy.yml contém as definições para implantar as imagens dos microserviços e o banco de dados, juntamente com o RabbitMQ, em um ambiente de produção. Esse arquivo é usado para gerenciar a implantação de aplicativos em contêineres do Docker em um ambiente de produção.

CI/CD Pipeline com Jenkins

Este pipeline Jenkinsfile é definido em uma linguagem de script para a ferramenta Jenkins. Ele tem vários estágios para compilar, testar e implantar dois serviços diferentes:

  • Discovery e Rent
    • O estágio de "Build Discovery" verifica o código-fonte no repositório do GitHub, compila o código-fonte usando o Maven e empacota em um arquivo WAR.
    • Em seguida, o estágio "Deploy Discovery" implanta o serviço no servidor Tomcat local.
    • O estágio "Build Rent" compila o código-fonte do serviço Rent.
    • O estágio "Unit Tests-Rent" executa os testes unitários para o serviço Rent.
    • O estágio "Sonar Analysis" executa a análise de código-fonte usando o SonarQube do docker-compose docker-compose-sonar.yml.
    • O estágio "Deploy Rent" implanta o serviço Rent no servidor Tomcat.
    • Finalmente, o estágio "API Test-Rent" executa testes de API em um projeto de teste separado.

Links

Os links estão disponíveis na documentação para auxiliar o desenvolvedor, porém itens como login e senha devem ser consultados nos arquivos de propriedade da aplicação.

Nome Link
Swagger http://localhost:8081/crudService/swagger-ui.html#
RabbitMQ http://localhost:15672/#/

EndPoints dos microsserviços

Aplicação Porta context-path EndPoint
discovery 8087 /discovery http://localhost:8087/discovery/*
acquisition 8084 /acquisitionService http://localhost:8084/acquisitionService/*
auth 8083 /authService http://localhost:8083/authService/*
CrudService 8081 /crudService http://localhost:8081/crudService/*
gateway 8080 /gateway http://localhost:8080/gateway/*
payment 8082 /paymentService http://localhost:8082/paymentService/*
rent 8085 /rentService http://localhost:8085/rentService/*
scheduling 8086 /schedulingService http://localhost:8086/schedulingService/*

⚙ Tecnologias Utilizadas

Tecnologia Versão
🐬MySQL 8.0.23
🍃Spring Boot 2.4.2
📺Netflix Eureka 1.10.11

🔨 Ferramentas

Front-End

  • O front-end encontra-se em outro repositório. GitHub

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages