Distributed Event Processing System is an original Java project built for Jeshwin William James to demonstrate event-driven backend design, asynchronous processing, retry handling, dead-letter workflows, and operational metrics.
- Event ingestion through REST APIs
- In-memory distributed queue simulation with worker threads
- Event status tracking from
RECEIVEDtoPROCESSED,RETRYING, orDEAD_LETTER - Automatic retry handling for transient failures
- Dead-letter queue support for permanently failed events
- Processing metrics for observability and interview discussions
- Java 25
- Built-in
HttpServer - Concurrent queues and worker threads
- In-memory repositories for demo-friendly execution
distributed-event-processing-system/
README.md
resume-project-entry.md
sample-requests.http
src/com/jeshwin/eventprocessing/
cd /Users/jeshwinwilliam/Documents/Playground/distributed-event-processing-system
mkdir -p out
find src -name '*.java' -print0 | xargs -0 javac --release 25 -d out
java -cp out com.jeshwin.eventprocessing.DistributedEventProcessingApplicationServer starts at http://localhost:9090.
curl http://localhost:9090/api/healthcurl -X POST http://localhost:9090/api/events/publish \
-H "Content-Type: application/json" \
-d '{
"eventType":"PAYMENT_CREATED",
"source":"checkout-service",
"payload":"orderId=ORD-1001, amount=249.99",
"partitionKey":"customer-42"
}'curl -X POST http://localhost:9090/api/events/publish \
-H "Content-Type: application/json" \
-d '{
"eventType":"PAYMENT_SETTLEMENT",
"source":"settlement-service",
"payload":"simulate_retry=true, orderId=ORD-1002",
"partitionKey":"customer-42"
}'curl -X POST http://localhost:9090/api/events/publish \
-H "Content-Type: application/json" \
-d '{
"eventType":"LEDGER_SYNC",
"source":"ledger-service",
"payload":"simulate_failure=permanent, ledgerId=LG-778",
"partitionKey":"ledger-778"
}'curl http://localhost:9090/api/events/EVENT_IDcurl http://localhost:9090/api/metricscurl http://localhost:9090/api/events/dead-letter- The project simulates an event-driven backend where producers submit events and worker threads process them asynchronously.
- The processing pipeline supports retries for transient failures and a dead-letter queue for non-recoverable events.
- Metrics endpoints expose ingestion, success, retry, and failure counts to mimic production monitoring patterns.
- The design makes it easy to discuss Kafka-style event architecture even though the local demo uses Java concurrency primitives.
Distributed Event Processing System | Java, REST APIs, Event-Driven Architecture, Concurrency
See resume-project-entry.md for polished resume bullets.