Este projeto implementa arquitetura de microserviços para um Sistema de Previsão do Tempo que recebe um CEP, identifiqua a cidade e retorna o clima atual (temperatura em graus Celsius, Fahrenheit e Kelvin) juntamente com a cidade. Esse sistema implementa OTEL (Open Telemetry) e Zipkin para tracing distribuído.
Baseado no desafío Go Challenge Google cloud Run: Weather API aqui denominado Serviço B, será incluído um novo projeto, denominado Serviço A.
Para título de nomenclatura e organização no Zipkin, o Serviço B será denominado orchestrator-service
e o Serviço A será será denomidado input-service
para receber o input do usuário e encaminhar para o orchestrator-service
.
- Receber um input de 8 dígitos via POST, através do schema:
{ "cep": "29902555" }
- Validar se o input é válido (contém 8 dígitos e é uma STRING).
- Caso seja válido, encaminhar para o Serviço B via HTTP.
- Caso não seja válido, retornar:
- Código HTTP: 422
- Mensagem:
invalid zipcode
- Receber um CEP válido de 8 dígitos.
- Realizar a pesquisa do CEP e encontrar o nome da localização.
- Retornar as temperaturas formatadas em Celsius, Fahrenheit e Kelvin, juntamente com o nome da localização.
-
Sucesso:
- Código HTTP: 200
- Response Body:
{ "city": "São Paulo", "temp_C": 28.5, "temp_F": 83.3, "temp_K": 301.65 }
-
Falha - CEP Inválido (formato correto):
- Código HTTP: 422
- Mensagem:
invalid zipcode
-
Falha - CEP não encontrado:
- Código HTTP: 404
- Mensagem:
can not find zipcode
- Implementar tracing distribuído entre Serviço A e Serviço B.
- Utilizar spans para medir o tempo de resposta do serviço de busca de CEP e busca de temperatura.
- Docker e Docker-compose instalados.
-
Clone o repositório:
git clone https://github.com/rzeradev/otel-zipkin cd otel-zipkin
-
Configure as variáveis de ambiente necessárias para o serviço B (verifique o arquivo
.env.example
e crie um.env
com as suas configurações).cd service-b && cp .env.example .env # Modifique o arquivo .env como necessário # Adicione a sua própria chave Weather API
-
Execute o Docker-compose para subir os serviços:
cd .. && docker-compose up --build
-
A aplicação estará disponível em
http://localhost:8080/weather
. -
Para testar o Serviço A, utilize um cliente HTTP (como Postman ou curl) para enviar um
POST
request com o seguinte payload:{ "cep": "29902555" }
alternativamente rodar o arquivo
run_requests.sh
que irá disparar várias requests cURL para testar vários cenárioschmod +x run_requests.sh && ./run_requests.sh
-
Verifique os traces no
Zipkin
disponível emhttp://localhost:9411
.
- Certifique-se de que as APIs externas utilizadas (viaCEP e WeatherAPI) estão acessíveis e com suas respectivas chaves configuradas.
- Ajuste os parâmetros de configuração de tracing e logging conforme necessário.