mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-03-21 18:11:27 -07:00
145 lines
3.7 KiB
Markdown
145 lines
3.7 KiB
Markdown
# Queues Configuration
|
|
|
|
## Create Queue
|
|
|
|
```bash
|
|
wrangler queues create my-queue
|
|
wrangler queues create my-queue --retention-period-hours=336 # 14 days
|
|
wrangler queues create my-queue --delivery-delay-secs=300
|
|
```
|
|
|
|
## Producer Binding
|
|
|
|
**wrangler.jsonc:**
|
|
```jsonc
|
|
{
|
|
"queues": {
|
|
"producers": [
|
|
{
|
|
"queue": "my-queue-name",
|
|
"binding": "MY_QUEUE",
|
|
"delivery_delay": 60 // Optional: default delay in seconds
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## Consumer Configuration (Push-based)
|
|
|
|
**wrangler.jsonc:**
|
|
```jsonc
|
|
{
|
|
"queues": {
|
|
"consumers": [
|
|
{
|
|
"queue": "my-queue-name",
|
|
"max_batch_size": 10, // 1-100, default 10
|
|
"max_batch_timeout": 5, // 0-60s, default 5
|
|
"max_retries": 3, // default 3, max 100
|
|
"dead_letter_queue": "my-dlq", // optional
|
|
"retry_delay": 300 // optional: delay retries in seconds
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## Consumer Configuration (Pull-based)
|
|
|
|
**wrangler.jsonc:**
|
|
```jsonc
|
|
{
|
|
"queues": {
|
|
"consumers": [
|
|
{
|
|
"queue": "my-queue-name",
|
|
"type": "http_pull",
|
|
"visibility_timeout_ms": 5000, // default 30000, max 12h
|
|
"max_retries": 5,
|
|
"dead_letter_queue": "my-dlq"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## TypeScript Types
|
|
|
|
```typescript
|
|
interface Env {
|
|
MY_QUEUE: Queue<MessageBody>;
|
|
ANALYTICS_QUEUE: Queue<AnalyticsEvent>;
|
|
}
|
|
|
|
interface MessageBody {
|
|
id: string;
|
|
action: 'create' | 'update' | 'delete';
|
|
data: Record<string, any>;
|
|
}
|
|
|
|
export default {
|
|
async queue(batch: MessageBatch<MessageBody>, env: Env): Promise<void> {
|
|
for (const msg of batch.messages) {
|
|
console.log(msg.body.action);
|
|
msg.ack();
|
|
}
|
|
}
|
|
} satisfies ExportedHandler<Env>;
|
|
```
|
|
|
|
## Content Type Selection
|
|
|
|
Choose content type based on consumer type and data requirements:
|
|
|
|
| Content Type | Use When | Readable By | Supports | Size |
|
|
|--------------|----------|-------------|----------|------|
|
|
| `json` | Pull consumers, dashboard visibility, simple objects | All (push/pull/dashboard) | JSON-serializable types only | Medium |
|
|
| `v8` | Push consumers only, complex JS objects | Push consumers only | Date, Map, Set, BigInt, typed arrays | Small |
|
|
| `text` | String-only payloads | All | Strings only | Smallest |
|
|
| `bytes` | Binary data (images, files) | All | ArrayBuffer, Uint8Array | Variable |
|
|
|
|
**Decision tree:**
|
|
1. Need to view in dashboard or use pull consumer? → Use `json`
|
|
2. Need Date, Map, Set, or other V8 types? → Use `v8` (push consumers only)
|
|
3. Just strings? → Use `text`
|
|
4. Binary data? → Use `bytes`
|
|
|
|
```typescript
|
|
// JSON: Good for simple objects, pull consumers, dashboard visibility
|
|
await env.QUEUE.send({ id: 123, name: 'test' }, { contentType: 'json' });
|
|
|
|
// V8: Good for Date, Map, Set (push consumers only)
|
|
await env.QUEUE.send({
|
|
created: new Date(),
|
|
tags: new Set(['a', 'b'])
|
|
}, { contentType: 'v8' });
|
|
|
|
// Text: Simple strings
|
|
await env.QUEUE.send('process-user-123', { contentType: 'text' });
|
|
|
|
// Bytes: Binary data
|
|
await env.QUEUE.send(imageBuffer, { contentType: 'bytes' });
|
|
```
|
|
|
|
**Default behavior:** If not specified, Cloudflare auto-selects `json` for JSON-serializable objects and `v8` for complex types.
|
|
|
|
**IMPORTANT:** `v8` messages cannot be read by pull consumers or viewed in the dashboard. Use `json` if you need visibility or pull-based consumption.
|
|
|
|
## CLI Commands
|
|
|
|
```bash
|
|
# Consumer management
|
|
wrangler queues consumer add my-queue my-worker --batch-size=50 --max-retries=5
|
|
wrangler queues consumer http add my-queue
|
|
wrangler queues consumer worker remove my-queue my-worker
|
|
wrangler queues consumer http remove my-queue
|
|
|
|
# Queue operations
|
|
wrangler queues list
|
|
wrangler queues pause my-queue
|
|
wrangler queues resume my-queue
|
|
wrangler queues purge my-queue
|
|
wrangler queues delete my-queue
|
|
```
|