See: docs/local-development.md
See: docs/testing.md
This is a single Spring Boot Maven project that demonstrates a real-world flow:
- REST API receives a student credit card application
- Application is persisted in H2
- An async event is published to SQS (LocalStack)
- A worker poller processes SQS messages like a Lambda consumer
- Idempotency is enforced via Redis (SETNX + TTL)
- Retries happen automatically if processing fails
- Poison messages are routed to DLQ after maxReceiveCount
- Java 17
- Spring Boot 3
- Maven
- LocalStack (SQS + DLQ)
- Redis (idempotency)
- H2 (local persistence)
- Testcontainers (integration tests)
- Java 17 installed
- Maven installed (or use IntelliJ Maven integration)
- Docker installed and running
-
File -> New -> Project
-
Choose Maven
-
GroupId:
com.northstar -
ArtifactId:
student-card-platform -
Name:
student-card-platform -
JDK: 17
-
Finish
-
REST endpoint (API)
-
“Lambda-like” async worker (SQS consumer) running inside the same Spring Boot app
-
Idempotency/dedup using Redis (local via Docker)
-
Retries + DLQ using SQS redrive policy (local via LocalStack)
-
Integration tests using Testcontainers (runs fully on your machine)
Then replace/add files exactly as in this repository.
From project root:
docker compose up -d