ARCHIVED from builddistributedsystem.com on 2026-04-28 — URL: https://builddistributedsystem.com/tracks/queues/tasks/task-15-1-basic-queue
TASK

Implementation

Build a basic in-memory message queue:

  1. Producers enqueue messages
  2. Consumers dequeue messages
  3. Messages delivered in FIFO order
  4. Thread-safe for concurrent access
  5. Support blocking and non-blocking receive

This decouples producers and consumers in time.

Sample Test Cases

FIFO orderTimeout: 5000ms
Input
{
  "src": "c0",
  "dest": "n1",
  "body": {
    "type": "init",
    "msg_id": 1,
    "node_id": "n1",
    "node_ids": [
      "n1"
    ]
  }
}
Expected Output
{"src":"n1","dest":"c0","body":{"type":"init_ok","in_reply_to":1,"msg_id":0}}
Concurrent accessTimeout: 5000ms
Input
{
  "src": "c0",
  "dest": "n1",
  "body": {
    "type": "init",
    "msg_id": 1,
    "node_id": "n1",
    "node_ids": [
      "n1"
    ]
  }
}
Expected Output
{"src":"n1","dest":"c0","body":{"type":"init_ok","in_reply_to":1,"msg_id":0}}

Hints

Hint 1
Use thread-safe data structure
Hint 2
Block on empty queue or return None
Hint 3
Handle multiple producers/consumers
OVERVIEW

Theoretical Hub

Message Queues

Queues decouple components: producers emit messages without waiting, consumers process at their own pace. This enables asynchronous processing, load leveling, and resilient architectures.

FIFO Ordering

First-in-first-out ensures messages are processed in send order. This matters for ordered event streams. Strict FIFO limits parallelism - a trade-off to consider.

Key Concepts

queueproducer-consumerFIFO
main.py
python
Implement Basic Message Queue - Queues | Build Distributed Systems