The Message Processing Application is a Spring Boot–based service responsible for sending messages, tracking their delivery status, and maintaining a message history.
It is designed to be concurrent-safe, idempotent, and resilient under high load.
- Message creation and sending
- Asynchronous message processing worker
- Message history persistence
- Opt-out support by phone number
- OpenAPI / Swagger UI support
- Java 21
- SpringBoot
- Hibernate
- Spring Validation
- Springdoc OpenAPI
- H2 (in-memory db)
- MessageController and OptOutController
- REST APIs for sending messages and opt-out
- MessageService
- Orchestrates message creation and processing
- MessageWorker
- Handles concurrent message delivery
- MessageHistoryService
- Persists message history entries
- GatewayRegistry
- Routes messages to delivery gateways
- Client sends a message via API
- Message is persisted with status
PENDING - Worker picks up the message
- Status transitions:
PENDING → SENT → DELIVERED / BLOCKED / FAILED
- Message history is stored
- Optimistic locking ensures only one worker processes a message
Swagger UI is available at: http://localhost:8080/swagger-ui/index.html
Prerequisites:
- Java 21
- Maven
mvn clean spring-boot:run
Run tests:
mvn test