This project is a simple API for a dynamic, reactive alerting system (minus the notification component). It consists of four different modules that comprise the overall functionality of the project.
- amqp
- api
- batch
- persistence
- Clone the project.
git clone [email protected]:Dark-Alex-17/alerting-api.git
- Open the
alerting-api
folder with IntelliJ. Use auto-import for a Gradle project.
The persistence tier will start up the in-memory H2 database. Once started, Flyway will populate the database with the alerting schema and test data, and also the default Quartz schema.
Once H2 is up and running, a TCP server is started on port 9091 so other applications can use the database.
The H2 browser console is available at http://localhost:8081/h2-console
./gradlew persistence:bootRun
The batch worker is what picks up messages from RabbitMQ and then schedules, and executes Quartz jobs.
The worker also creates the appropriate exchanges, queues, bindings, and all consumers.
./gradlew batch:bootRun
The API is how users provision alerts and recipients, and all data is persisted to the H2 database.
Additionally, all operations send a message to RabbitMQ to provision and schedule Quartz jobs in the batch worker.
The API is available at http://localhost:8080/api/alerting/v1/
API documentation is available here
./gradlew api:bootRun
- Kotlin - Primary language
- Spring Boot - Web framework
- Spring Data - JPA data access abstraction
- Spring AMQP - Asynchronous message communication library
- Apache Commons - Boilerplate code library
- Lombok - Boilerplate Java code generator
- Hibernate - Persistence framework
- Quartz Scheduler - Job scheduling and execution framework
- H2 Database - In-memory prototype database
- Flyway - Database Version Control
- RabbitMQ - Asynchronous Message Broker
- Gradle - Dependency management