poc-multi-module-arch-hexagonal-springboot
                                
                                 poc-multi-module-arch-hexagonal-springboot copied to clipboard
                                
                                    poc-multi-module-arch-hexagonal-springboot copied to clipboard
                            
                            
                            
                        POC Multi Modulos- Ports & Adapters Architecture ou Arquitetura Hexagonal
Arquitetura


Fundamentos teóricos
Ports & Adapters Architecture ou Arquitetura Hexagonal: A arquitetura hexagonal, ou arquitetura de portas e adaptadores, é um padrão arquitetural usado no design de software. O objetivo é criar componentes de aplicativos fracamente acoplados que possam ser facilmente conectados ao ambiente de software por meio de portas e adaptadores.
Pré -requisitos
Stack
- Sonar Analise de qualidade e cobertura de testes
- Elasticsearch Busca e análise de dados
- Logstash Pipeline de dados
- Kibana Visualização de dados
- Filebeat Log shipper
- Prometheus Monitoramento e alertas
- Grafana Análise e Monitoramento
- Alertmanager Envio de alertas
- Jaeger Tracing Distribuído
Portas
| Aplicação | Porta | 
|---|---|
| Ms-Launcher | 8080 | 
| Sonarqube | 9000 | 
| Postgres Sonarqube | 5432 | 
| MySQL | 3600 | 
| Elasticsearch | 9200 | 
| Logstash | 5044 | 
| Kibana | 5601 | 
| Prometheus | 9090 | 
| Grafana | 3000 | 
| Alertmanager | 9093 | 
| Jaeger | 16686 | 
Links
- Sonar Cloud
- http://localhost:9000
 
- Kibana
- http://localhost:5601
 
- Prometheus
- http://localhost:9090
 
- Grafana
- http://localhost:3000
 
- Alertmanager
- http://localhost:9093
 
- Jaeger
- http://localhost:16686
 
- OpenAPI
- Swagger
- http://localhost:8080/swagger-ui/index.html
 
- API Docs
- http://localhost:8080/v3/api-docs
 
 
- Swagger
Setup
- 
Variáveis de ambiente
| Variável de Ambiente | Descrição | 
|---|---|
| MYSQL_HOST | Especifique o host do banco de dados MySQLa ser usado (padrãolocalhost) | 
| MYSQL_PORT | Especifique a porta do banco de dados MySQLa ser usada (padrão3306) | 
| JAEGER_HOST | Especifique o host do Jaegera ser usado (padrãolocalhost) | 
| JAEGER_PORT | Especifique a porta do Jaegera ser usada (padrão6831) | 
Start da aplicação via script
- Entre no diretorio dos scripts cd scripts
- Execute o seguinte comando:
/bin/bash start-app.sh
Executando a aplicação com maven
- Execute o seguinte comando:
./mvnw clean spring-boot:run --projects ms-launcherNota: Se você quiser mudar para "non-json-logs" (talvez durante o desenvolvimento seja útil), execute ./mvnw clean spring-boot:run --projects ms-launcher -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=non-json-logs"
Executar docker-compose para subir aplicação com container docker
- Execute o seguinte comando para subir os containers:
docker-compose up
- Execute o seguinte comando para verificar os status do containers docker:
docker-compose ps
Sonarqube
- Realize o Login com user: admin password: admin, gerar para uma nova senha
- Clique na opção Manually
- Crie os Project display name/project key: poc-multi-module-arch-hexagonal-springboot
- Clique na opção Locally
- Preencha com wose clique em Generate
- Subtitua o project key e token do arquivo scripts/sonar.shpelos criado agora
- Entre no diretorio dos scripts cd scripts
- Execute o seguinte comando:
/bin/bash sonar.sh
Pitests
- Execute o comando na raiz do projeto
mvn clean test-compile org.pitest:pitest-maven:mutationCoverage
- Dentro da pasta target vai ser gerada um pasta pit-report onde se contra o HTML com o relatorio dos testes mutantes.
Kibana
- Na página principal, clique no ícone do menu "hambúrguer" e, em seguida, clique em Discover
- Clique no botão Create index pattern
- No campo Name, definafilebeat-*
- No campo Timestamp fieldselecione@timestamp
- Clique no botão Create index pattern
- Clique no ícone do menu "hambúrguer"Discover novamente e depois clique para iniciar as pesquisas
Prometheus
- Na Página Principal, é possivel consultar metricas disponível no recurso http://localhost:8080/actuator/prometheus
- Exemplo: pesquise por http_server_requests_seconds_sumvai retorna as metricas/grafico (clicando na aba graph)
- No Menu superior selecione a opção Status -> Targets para vizualizar o status do serviço configurado
Grafana
- Realize o Login com user: admin password: admin, gerar para uma nova
- Na Página Princial, clique em dashboard -> browsedepois clique emJVM (Micrometer)ele vai abrir um dashboard
- Criar dashboard de monitoramento custom:
- Na Página Princial, clique em dashboard -> browsedepois clique emmetrics-ms-launcher-apiele vai abrir um dashboard
 
- Na Página Princial, clique em 
Alertmanager
- Na Página Principal, clicando na aba alertsconseguimos ver os acionados e que o alertmanager vai enviar a comunicação via feramenta configurada
Deletar todos containers Docker
- Entre no diretorio dos scripts cd scripts
- Execute o seguinte comando:
/bin/bash remove-docker-images.sh
TODO List
- [x] Qualidade de código
- [x] Sonarqube
- [x] Teste Mutantes (Pitest)
- [ ] Teste com docker (Testcontainers)
 
- [x] Observabilidade
- [x] Logs ELK (Elasticsearch, Logstash, Kibana) e Filebeat
- [x] Prometheus e Grafana
- [x] Jaeger distributed tracing
 
- [ ] Kafka
- [x] Producer
- [x] Consumer
- [ ] Retries e Dead Letter Queues