commit b2ed41c54919523cdc4387eba54e2672a9b38afa Author: Alex Clarke Date: Fri Feb 16 17:35:31 2024 -0700 Initial Commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..b178a40 --- /dev/null +++ b/README.md @@ -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 +![alerting architecture](./alerting-architecture.png) + +## 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 \ No newline at end of file