matiastort01 /
metamapa-backend
Sistema distribuido y API REST (Java/Spring Boot) para la recolección, normalización y agregación de hechos geolocalizados desde múltiples fuentes.
Loading repository data…
rodvpx / repository
Sistema distribuído de clima utilizando arquitetura de microsserviços com Spring Boot, REST e gRPC. O cliente REST consome um servidor gRPC para cadastro de cidades, consulta de temperatura, previsão e estatísticas climáticas. Projeto executado com Docker Compose.
Este projeto é um sistema distribuído composto por dois microsserviços (um Cliente REST e um Servidor gRPC) que se comunicam utilizando o protocolo gRPC para consultar, cadastrar e fornecer estatísticas sobre o clima de diversas cidades.
O repositório segue a estrutura padrão do ecossistema Java/Spring Boot com orquestração via Docker:
weather-grpc-system/
├── src/ # Código-fonte Java e contrato (.proto)
│ └── main/
│ ├── java/ # Implementação do cliente REST e servidor gRPC
│ ├── proto/ # Arquivo weather.proto (contrato gRPC)
│ └── resources/ # Configurações do Spring Boot (application.yaml)
├── build.gradle # Configuração de dependências e plugins
├── settings.gradle # Configuração do projeto
├── docker-compose.yml # Orquestrador dos containers
├── client.dockerfile # Instruções de build da imagem do Cliente
├── server.dockerfile # Instruções de build da imagem do Servidor
O projeto foi configurado com Docker e Docker Compose, o que torna a execução muito simples através de multi-stage builds. Você não precisa ter o Gradle ou o Java instalados na sua máquina, apenas o Docker.
docker compose up --build
http://localhost:8080.Nota: Para parar a execução, utilize
Ctrl + Cno terminal e depois executedocker compose downpara remover os containers.
O cliente REST expõe os seguintes endpoints na porta 8080 para comunicação com o usuário final. Estes endpoints repassam a requisição via gRPC para o servidor na porta 9090.
| Método HTTP | Endpoint | Descrição | Exemplo de Uso |
|---|---|---|---|
| POST | /cidade | Cadastra uma nova cidade no mock do servidor. | Corpo (JSON): {"nome": "Ipameri"} |
| GET | /cidades | Lista os nomes de todas as cidades cadastradas. | http://localhost:8080/cidades |
| GET | /temperatura | Retorna a temperatura atual da cidade informada. | http://localhost:8080/temperatura?cidade=Ipameri |
| GET | /previsao | Retorna a previsão de temperatura para os próximos dias. | http://localhost:8080/previsao?cidade=Ipameri |
| GET | /estatisticas | Retorna os cálculos de média, mínima e máxima da cidade. | http://localhost:8080/estatisticas?cidade=Ipameri |
.protoO arquivo weather.proto é o "contrato" do nosso sistema. Ele define exatamente como a comunicação entre o cliente e o servidor vai acontecer, sendo agnóstico de linguagem.
service)service WeatherService {
rpc CadastrarCidade (CidadeRequest) returns (CidadeResponse);
rpc ListarCidades (Empty) returns (ListaCidadesResponse);
rpc ObterTemperaturaAtual (CidadeRequest) returns (TemperaturaResponse);
rpc PrevisaoCincoDias (CidadeRequest) returns (PrevisaoResponse);
rpc EstatisticasClimaticas (CidadeRequest) returns (EstatisticasResponse);
}
O bloco service agrupa todas as chamadas remotas (RPCs) que o nosso servidor gRPC expõe. Ele funciona como uma interface (interface) no Java. Cada método RPC define o que ele recebe como entrada e o que devolve como saída.
message)message CidadeRequest {
string nome = 1;
}
message TemperaturaResponse {
string cidade = 1;
double temperatura = 2;
}
// ... outras mensagens
As messages são as estruturas de dados transportadas na rede. Elas se transformam em classes Java (DTOs). Os números (= 1, = 2) são chamados de tags; eles são usados pelo Protobuf para codificar o campo em binário, garantindo que o transporte seja extremamente leve e rápido, em vez de enviar os nomes dos campos em texto plano (como no JSON).
CadastrarCidade: Recebe um CidadeRequest (com o nome da cidade) e retorna uma CidadeResponse confirmando o cadastro.ListarCidades: Recebe uma mensagem Empty (vazia) e devolve uma ListaCidadesResponse contendo um array (ou lista) de strings com todas as cidades cadastradas.ObterTemperaturaAtual: Recebe um CidadeRequest e retorna um TemperaturaResponse com a temperatura daquela cidade no momento atual (pegando o primeiro registro do mock).PrevisaoCincoDias: Recebe a cidade e devolve uma PrevisaoResponse, que internamente contém uma lista (repeated) da mensagem PrevisaoDia (com o nome do dia e a respectiva temperatura).EstatisticasClimaticas: Recebe a cidade e devolve uma EstatisticasResponse contendo cálculos como a média, a mínima e a máxima de temperatura daquela cidade..proto gera código (Stubs)Através do plugin protoc configurado no build.gradle, o compilador do Protobuf analisa o arquivo weather.proto toda vez que o comando de build é executado. Ele gera dois tipos de códigos (chamados de Stubs):
message (ex: CidadeRequest).WeatherServiceImplBase) que nós estendemos (extends) na nossa classe WeatherServiceImpl para escrever a lógica real./cidade enviando os dados em formato JSON no Body).WeatherController. Ele converte o JSON da requisição em um objeto Java (CidadeDto).CidadeRequest do gRPC.cadastrarCidade(req) diretamente no stub (que foi injetado pelo Spring Boot via @GrpcClient).CidadeRequest e chama o método correspondente no WeatherServiceImpl.CidadeResponse, serializa para binário e devolve. O Stub no cliente recebe, desserializa e o Controller REST transforma isso novamente em JSON/Texto para a resposta HTTP do usuário.Abaixo estão as capturas de tela demonstrando o funcionamento de cada endpoint do sistema via Postman:
/cidade)Aqui demonstramos o cadastro de uma nova cidade no sistema, enviando um payload JSON no Body da requisição ({"nome": "Urutaí"}).
Recebemos status 200 OK, e mensagem de Cidade cadastrada!
/cidades)Retorna a lista de todas as cidades que foram cadastradas no mock.
Recebemos status 200 OK, com a lista das cidades cadastradas [ "Urutaí", "Ipameri", "Goiania" ]
/temperatura)Abaixo, consultamos a temperatura atual para as cidades cadastradas:
/previsao)Essas requisições retornam um mapa com a previsão do tempo para os próximos dias de uma cidade específica.
/estatisticas)Por fim, os endpoints que retornam a média, mínima e máxima calculadas a partir das previsões.
Selected from shared topics, language and repository description—not editorial ratings.
matiastort01 /
Sistema distribuido y API REST (Java/Spring Boot) para la recolección, normalización y agregación de hechos geolocalizados desde múltiples fuentes.
JoabioVilela /
Solução para Gestão de Relacionamento com o Cliente (Customer Relationship Management, CRM). Um Sistema Distribuído baseado em Arquitetura de Microsserviços, Backend Java API RESTful, Mensageria, Pipeline CI/CD, Monitoramento, Observabilidade, etc)
acarolinap /
Projeto de Back-end (API de Serviços) para o Sistema de Controle de Estoque. Desenvolvido com Java e Spring Boot para a UC de Sistemas Distribuídos e Mobile.
my-university-projects-ufpi /
Este projeto consiste em uma prova de conceito desenvolvida para a disciplina de Sistemas Distribuídos, com o objetivo de demonstrar o funcionamento de um sistema básico de envio de mensagens entre usuários por meio de uma API.
PunkerGhoul /
Proyecto de curso Sistemas Distribuidos, consiste en el backend de una aplicación web enfocada al manejo de partidos de fútbol, estructura CRUD orientado a la integración de base de datos y frontend en diferentes sistemas, el backend corresponde a una rest api.
Projeto de sistema distribuído para reserva de cinema, implementado com backend em Java e frontend em React. Inclui autenticação via Supabase, gestão de assentos (disponíveis/ocupados, normais/VIP), e operações de reserva/cancelamento através de uma API integrada.