A Near-Earth Object (NEO) monitoring and alerting system built with Spring Boot.
It tracks potentially hazardous asteroids using NASA's NeoWs API and sends real-time email notifications.
- Real-time asteroid monitoring (NASA NeoWs API)
- Hazardous asteroid detection
- Event-driven architecture with Kafka
- Email alerts for registered users
- User management & preferences
- Health checks and monitoring
- Microservices architecture (Asteroid & Email services)
- Kafka-based asynchronous processing
- MySQL persistence (users, notifications)
- REST APIs with OpenAPI/Swagger docs
- Scheduled monitoring & alerting
- Robust error handling/logging
1. NeoWs Service (8080)
- Fetches asteroid data, detects hazards, publishes alerts
- Components:
AlertController,AlertService,NasaClient, Kafka producer
2. Email Notification Service (8082)
- Consumes alerts, manages users, sends emails
- Components:
UserController,NotificationService,EmailService,UserService
- Apache Kafka for events
- MySQL for persistence
- Kafka UI (8084) for monitoring
- Java 21, Spring Boot 3.x
- Spring Data JPA, MySQL
- Apache Kafka
- Java Mail Sender
- Docker Compose
- Lombok
- OpenAPI/Swagger
- Java 21+
- Docker & Docker Compose
- NASA API Key (https://api.nasa.gov/)
- MySQL or Dockerized DB
- Email credentials (MailTrap/SMTP)
-
Setup Environment
git clone https://github.com/aaronwittchen/Sorting-Visualization-Tool.git cd Sorting-Visualization-Tool cp NeoWs/env.template NeoWs/.env cp emailnotificationservice/env.template emailnotificationservice/.env -
Configure Variables
NASA_API_KEY, DB creds, SMTP creds
-
Start Infrastructure
cd NeoWs docker-compose up -d # Kafka UI at http://localhost:8084
-
Run Services
cd NeoWs && ./mvnw spring-boot:run cd emailnotificationservice && ./mvnw spring-boot:run
-
Test
# Trigger alert curl -X POST http://localhost:8080/api/v1/asteroid-alerts/alert # Register user curl -X POST http://localhost:8082/api/users -H "Content-Type: application/json" -d '{"fullName":"John Doe","email":"john@example.com"}'
NeoWs Service (8080)
GET /api/v1/asteroid-alerts/healthPOST /api/v1/asteroid-alerts/alert- Swagger:
/swagger-ui.html
Email Service (8082)
POST /api/users(register)GET /api/users(list)GET /api/users/{id}PUT /api/users/{id}/notificationPOST /api/users/send-alertsDELETE /api/users/{id}- Swagger:
/swagger-ui.html
- NeoWs fetches 7-day asteroid data
- Filters hazardous asteroids
- Publishes events to Kafka (
asteroid-alert) - Email service consumes, stores, processes events
- Scheduled job sends emails to users with alerts enabled
-
Kafka UI: http://localhost:8084
-
Health checks:
-
Logs: console + Kafka topic inspection
- NASA API:
https://api.nasa.gov/neo/rest/v1/feed(7-day range, 1000 req/hr free tier) - Kafka:
localhost:9092, topicasteroid-alert - Email: MailTrap/SMTP, scheduled ~10s (configurable)
- Invalid NASA API key → update
.env - Kafka issues → check container status and UI
- DB issues → verify MySQL creds
- Email failures → check SMTP settings/network
Logs and Kafka UI are primary debugging tools.