A serverless, event-driven backend system that processes orders asynchronously using Azure Functions, Queue Storage, and Cosmos DB. The system demonstrates real-world patterns such as decoupling, retry handling, and eventual consistency.
Client
│
▼
createOrder (HTTP Function)
│
▼
Azure Queue Storage ←─── (decoupling + async boundary)
│
▼
processOrder (Queue Trigger Function)
│
▼
Cosmos DB
- Azure Functions (Python) — Serverless compute for API and worker
- Azure Queue Storage — Message queue for asynchronous processing
- Azure Cosmos DB (SQL API) — NoSQL database for order state
- Azurite — Local development for storage emulation
- Postman — API testing
- Client sends request to
createOrderAPI - System generates:
orderId- status = CREATED
- Order is stored in Cosmos DB
- Order message is pushed to Azure Queue
- API returns response immediately (no blocking)
- Queue triggers the
processOrderworker function - Worker updates status to PROCESSING
- Executes business logic (simulated processing)
- Failures are simulated during processing
- Azure Queue automatically retries failed messages
- Retry count is tracked using
dequeue_count
- If retries remain → message is reprocessed
- If retries exhausted → order marked as FAILED
CREATED → PROCESSING → COMPLETED/FAILED (after fixed number of retries)
All order states are stored in Cosmos DB:
- CREATED (initial state)
- PROCESSING (during execution)
- COMPLETED / FAILED (final state)
Example: https://order-system-func-mk31.azurewebsites.net/api/createOrder
Request
{
"item": "item_name"
}Response
{
"orderId": "...",
"status": "CREATED"
}Example: https://order-system-func-mk31.azurewebsites.net/api/getOrder/2bb9c503-fe22-4fb5-96ff-4e5d0b67b627
Returns the latest order state from Cosmos DB.

Deployed on Azure Functions: Click here for deployed link.
- Event-driven architecture
- Asynchronous processing
- Decoupling via message queues
- Retry mechanisms & failure handling
- Eventual consistency
- Serverless deployment (Azure Functions)
V1 (Basic)
- main branch
- Azure Queue Storage
- Simple async processing
V2 (Current)
- redis-servicebus branch
- Service Bus integration
- Redis-based inventory reservation
- Compensation logic
- Application Insights logging
- Add authentication (Azure AD / API keys)
- Replace Queue with Azure Service Bus for advanced messaging
- Add monitoring via Application Insights
- Optimize latency by co-locating resources
- Implement dead-letter queue handling

