Initial Commit
This commit is contained in:
@@ -0,0 +1,69 @@
|
|||||||
|
# Dynanmic, Reactive Alerting API (Proof-of-Concept)
|
||||||
|
|
||||||
|
This project is a proof-of-concept API for a dynamic, reactive alerting system.
|
||||||
|
It consists of four different modules that comprise the overall functionality of the project.
|
||||||
|
|
||||||
|
* amqp
|
||||||
|
* api
|
||||||
|
* batch
|
||||||
|
* persistence
|
||||||
|
|
||||||
|
*Note that the notification component is not part of this proof-of-concept*
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|

|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
1. Clone the project. `git clone git@github.com:Dark-Alex-17/alerting-poc.git`
|
||||||
|
2. Open the `alerting-poc` folder with IntelliJ. Use auto-import for a Gradle
|
||||||
|
project.
|
||||||
|
|
||||||
|
## Running the POC
|
||||||
|
### Start the persistence tier
|
||||||
|
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
|
||||||
|
|
||||||
|
#### Start the Persistence Layer
|
||||||
|
|
||||||
|
`./gradlew persistence:bootRun`
|
||||||
|
|
||||||
|
### Start the batch worker
|
||||||
|
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`
|
||||||
|
|
||||||
|
### Start the Alerting API
|
||||||
|
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/poc/alerting/v1/
|
||||||
|
|
||||||
|
The OpenAPI spec is available [here](docs/AlertingApi.yaml).
|
||||||
|
|
||||||
|
`./gradlew api:bootRun`
|
||||||
|
|
||||||
|
## Built With
|
||||||
|
|
||||||
|
* [Kotlin](https://kotlinlang.org) - Primary language
|
||||||
|
* [Spring Boot](https://projects.spring.io/spring-boot/) - Web framework
|
||||||
|
* [Spring Data](https://spring.io/projects/spring-data-jpa) - JPA data access abstraction
|
||||||
|
* [Spring AMQP](https://spring.io/projects/spring-amqp) - Asynchronous message communication library
|
||||||
|
* [Apache Commons](https://commons.apache.org/) - Boilerplate code library
|
||||||
|
* [Lombok](https://projectlombok.org/) - Boilerplate Java code generator
|
||||||
|
* [Hibernate](https://hibernate.org/) - Persistence framework
|
||||||
|
* [Quartz Scheduler](http://www.quartz-scheduler.org/) - Job scheduling and execution framework
|
||||||
|
* [H2 Database](https://www.h2database.com/html/main.html) - In-memory prototype database
|
||||||
|
* [Flyway](https://flywaydb.org/) - Database Version Control
|
||||||
|
* [RabbitMQ](https://www.rabbitmq.com/) - Asynchronous Message Broker
|
||||||
|
* [Gradle](https://gradle.org/) - Dependency management
|
||||||
Reference in New Issue
Block a user