This skill should be used when the user asks to "set up Cloudflare Queues", "create a message queue", "implement queue consumer", "process background jobs", "configure queue retry logic", "publish messages to queue", "implement dead letter queue", or encountering "queue timeout", "message retry", "throughput exceeded", "queue backlog" errors.
View on GitHubsecondsky/claude-skills
cloudflare-queues
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/secondsky/claude-skills/blob/main/plugins/cloudflare-queues/skills/cloudflare-queues/SKILL.md -a claude-code --skill cloudflare-queuesInstallation paths:
.claude/skills/cloudflare-queues/# Cloudflare Queues
**Status**: Production Ready ✅ | **Last Verified**: 2025-12-27
**Dependencies**: cloudflare-worker-base (for Worker setup)
**Contents**: [Quick Start](#quick-start-10-minutes) • [Critical Rules](#critical-rules) • [Top Errors](#top-3-critical-errors) • [Use Cases](#common-use-cases) • [When to Load References](#when-to-load-references) • [Limits](#limits--quotas)
---
## Quick Start (10 Minutes)
### 1. Create Queue
```bash
bunx wrangler queues create my-queue
bunx wrangler queues list
```
### 2. Producer (Send Messages)
**wrangler.jsonc:**
```jsonc
{
"name": "my-producer",
"main": "src/index.ts",
"queues": {
"producers": [
{
"binding": "MY_QUEUE",
"queue": "my-queue"
}
]
}
}
```
**src/index.ts:**
```typescript
import { Hono } from 'hono';
type Bindings = {
MY_QUEUE: Queue;
};
const app = new Hono<{ Bindings: Bindings }>();
app.post('/send', async (c) => {
await c.env.MY_QUEUE.send({
userId: '123',
action: 'process-order',
timestamp: Date.now(),
});
return c.json({ status: 'queued' });
});
export default app;
```
### 3. Consumer (Process Messages)
**wrangler.jsonc:**
```jsonc
{
"name": "my-consumer",
"main": "src/consumer.ts",
"queues": {
"consumers": [
{
"queue": "my-queue",
"max_batch_size": 10,
"max_retries": 3,
"dead_letter_queue": "my-dlq"
}
]
}
}
```
**src/consumer.ts:**
```typescript
import type { MessageBatch } from '@cloudflare/workers-types';
export default {
async queue(batch: MessageBatch): Promise<void> {
for (const message of batch.messages) {
console.log('Processing:', message.body);
// Your logic here
}
// Implicit ack: returning successfully acknowledges all messages
},
};
```
**Deploy:**
```bash
bunx wrangler deploy
```
**Load**: `references/setup-guide.md` for complete 6-step setup with DLQ configuration
---
## Critical Rules
### Always Do ✅
1. **Conf