Este microserviço faz parte de um projeto pessoal de estudos para aplicar conceitos e ferramentas de nível intermediário-avançado no desenvolvimento de APIs e microserviços.
Este microserviço foi desenvolvido para retornar um endereço completo a partir de um CEP, utilizando tecnologias modernas e práticas avançadas de observabilidade e resiliência. Abaixo estão os principais destaques:
- Consulta a APIs Externas: Utilização do Open Feign (Spring) para realizar chamadas a serviços externos de forma declarativa, facilitando a integração com outras APIs.
- Arquitetura Hexagonal: Implementação da Arquitetura Hexagonal, que promove a separação de responsabilidades e facilita a escalabilidade e testabilidade do serviço.
- Práticas de Resiliência: Utilização do Resilience4j para implementar um Circuit Breaker, garantindo que o serviço seja resiliente a falhas em serviços externos e evitando sobrecarga em caso de falhas repetidas.
- Fallback: Implementação de mecanismos de fallback para fornecer respostas alternativas em caso de falha e retry para tentar novamente operações que falharem, aumentando a robustez do sistema.
No desenvolvimento deste projeto, foram utilizadas as seguintes tecnologias:
- Java 21: Linguagem de programação utilizada para desenvolvimento do microserviço.
- Spring 3.2: Framework que oferece suporte para a criação de aplicações Java robustas.
- Open Feign: Cliente HTTP declarativo que simplifica a integração com APIs externas.
- Resilience4j: Biblioteca para implementação de padrões de resiliência, como Circuit Breaker.
- Spring Actuator: Ferramenta para monitoramento e gerenciamento da aplicação.
- Micrometer: Facade para coleta de métricas de aplicação.
- Prometheus: Sistema de monitoramento e alerta para métricas.
- Grafana: Plataforma de observabilidade para visualização de métricas e logs.
A observabilidade é crucial para monitorar a saúde e o desempenho do microserviço. Neste projeto, utilizamos:
- Spring Actuator: Proporciona endpoints prontos para monitoramento e gerenciamento da aplicação.
- Micrometer: Integração com Prometheus para coletar métricas detalhadas.
- Prometheus: Coleta e armazena métricas para análise.
- Grafana: Visualiza as métricas coletadas, permitindo a criação de dashboards personalizados.
Para aumentar a resiliência do microserviço, foram implementadas as seguintes práticas:
- Fallback: Proporciona respostas alternativas em caso de falha de serviços dependentes.
- Circuit Breaker com Resilience4j: Protege o sistema contra falhas em serviços dependentes, impedindo chamadas repetidas a serviços que estão com falhas.
Estas práticas de resiliência de API's e Microserviços garantem que o microserviço seja capaz de lidar com falhas de forma robusta, mantendo a disponibilidade e a integridade do sistema.
Para executar o microserviço, siga os passos abaixo:
- Clone o repositório:
git clone https://github.com/bragabriel/microservice-cep.git
- Navegue até o diretório do projeto:
cd microservice-cep
- Crie os containers Docker:
docker-compose up -d
- Aplicação: localhost:8081
- CEP-Api:
- (Consulta bem-sucedida): localhost:8081/api/address/{CEP}
- (Forçando a falha para testes): localhost:8081/api/address/0
- Spring Actuator: localhost:8081/actuator
- Prometheus: localhost:9090
- Grafana: localhost:3000
Para visualizar as métricas coletadas, você pode configurar o Prometheus e Grafana conforme a documentação oficial dessas ferramentas, utilizando o dashboard de sua preferência 😃