Skip to content

jeshwinwilliam/distributed-event-processing-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

Distributed Event Processing System

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.

What this project demonstrates

  • Event ingestion through REST APIs
  • In-memory distributed queue simulation with worker threads
  • Event status tracking from RECEIVED to PROCESSED, RETRYING, or DEAD_LETTER
  • Automatic retry handling for transient failures
  • Dead-letter queue support for permanently failed events
  • Processing metrics for observability and interview discussions

Tech stack

  • Java 25
  • Built-in HttpServer
  • Concurrent queues and worker threads
  • In-memory repositories for demo-friendly execution

Project structure

distributed-event-processing-system/
  README.md
  resume-project-entry.md
  sample-requests.http
  src/com/jeshwin/eventprocessing/

Run locally

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.DistributedEventProcessingApplication

Server starts at http://localhost:9090.

API endpoints

Health check

curl http://localhost:9090/api/health

Publish an event

curl -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"
  }'

Publish an event that triggers retries

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"
  }'

Publish an event that goes to dead letter

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"
  }'

Check event status

curl http://localhost:9090/api/events/EVENT_ID

View metrics

curl http://localhost:9090/api/metrics

View dead-letter queue

curl http://localhost:9090/api/events/dead-letter

How to explain this in interviews

  • 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.

Resume-ready project title

Distributed Event Processing System | Java, REST APIs, Event-Driven Architecture, Concurrency

See resume-project-entry.md for polished resume bullets.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages