Explain message queues.
Skip to solutionKEEP THE
mediumSystem Design
What is a message queue and why use one?
276 views
01
Understand the problem
message-queue
02
Attempt it yourself
Sketch your approach before reading the solution — that's what interviews test.
Nudge consolestandby
Stuck? Beam a request up — the console returns a conceptual nudge that guides your logic without spoiling the implementation.
03
Study the solution
What Is a Message Queue, and Why Use One?
Target Audience: Junior & Senior Software Engineers preparing for System Design Interviews — no prior system design knowledge assumed. Difficulty: Easy to Medium
How to read this doc: Every concept is explained in plain language first. Right after, you'll see
Solution ready — 2 min read
Classified // press E to declassify
04
Read the code
Message queue with visibility timeout (at-least-once redelivery)
Run Playgroundclass MessageQueue {
constructor() {
this.messages = [];
}
enqueue(id, body, now) {
this.messages.push({ id, body, visibleAt: now });
}
dequeue(now, visibilityTimeout) {
for (const msg of this.messages) {
if (msg.visibleAt <= now) {
msg.visibleAt = now + visibilityTimeout;
return [msg.id, msg.body];
}
}
return null;
}
ack(id) {
this.messages = this.messages.filter((m) => m.id !== id);
}
}
function printResult(result) {
if (result === null) {
console.log('None');
} else {
console.log(`('${result[0]}', '${result[1]}')`);
}
}
const queue = new MessageQueue();
queue.enqueue('msg1', 'process order #1', 0);
queue.enqueue('msg2', 'process order #2', 0);
process.stdout.write('dequeue at t=1: ');
printResult(queue.dequeue(1, 10));
process.stdout.write('dequeue at t=2: ');
printResult(queue.dequeue(2, 10));
queue.ack('msg2');
process.stdout.write('dequeue at t=8 (msg1 still hidden): ');
printResult(queue.dequeue(8, 10));
process.stdout.write('dequeue at t=15 (msg1 visibility expired, redelivered): ');
printResult(queue.dequeue(15, 10));
queue.ack('msg1');
process.stdout.write('dequeue at t=20 (queue empty): ');
printResult(queue.dequeue(20, 10));05
Join the discussion
Discussion (0)
Sign in to join the discussion.
No responses yet. Be the first to share what you think.
Transmission complete // awaiting log
KEEP THE
STREAK ALIVE.
Dossier 38 of 99 decoded in the System Design track. One more won't hurt.