太长不看: Cloudflare Queues 是一项针对 Workers 的全球消息队列服务,用于处理异步任务、负载均衡以及重试逻辑。本指南涵盖了队列配置、生产者/消费者模式、批处理以及死信队列。
引言
异步处理将请求处理与高开销的操作解耦。您无需在 HTTP 请求期间处理电子邮件的发送任务,而是可以将其排入队列并独立进行处理。要了解有关结合 Durable Objects 实现实时协调功能的更多异步模式,请参阅我们的 Cloudflare Workers Durable Objects 专属指南。Queues 提供至少一次的交付保障、自动重试以及可配置的并发度。
队列配置
# wrangler.jsonc
{
"queues": {
"producers": ["email-queue"],
"consumers": {
"email-queue": {
"max_batch_size": 10,
"max_batch_timeout": 5,
"max_retries": 3,
"dead_letter_queue": "email-queue-dlq"
}
}
}
}
生产者模式
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const body = await request.json()
await env.EMAIL_QUEUE.send({
to: body.email,
template: 'welcome',
data: { name: body.name },
})
return new Response('Queued', { status: 202 })
},
}
消费者处理程序
export default {
async queue(batch: MessageBatch<EmailMessage>, env: Env): Promise<void> {
for (const message of batch.messages) {
try {
await sendEmail(message.body)
message.ack()
} catch (error) {
message.retry({ delaySeconds: 60 })
}
}
},
}
队列使用场景
| 使用场景 | 生产者 | 消费者 | 重试策略 |
|---|---|---|---|
| 发送电子邮件 | Webhook 处理程序 | 电子邮件服务 | 重试 3 次,60s 延迟 |
| 图像处理 | 上传处理程序 | 图像优化器 | 重试 5 次,30s 延迟 |
| 数据同步 | Webhook 接收器 | 外部 API 同步 | 重试 10 次,指数级 |
| 报告生成 | Cron 触发器 | PDF 生成器 | 重试 2 次,5min 延迟 |
结论
Queues 为 Workers 应用程序提供了极其可靠的异步处理能力。请将其用于任何无需在 HTTP 请求期间就完成的操作——例如发送电子邮件、图像处理、数据同步,以及各类报告生成。如果您想要调度能够定期产生队列任务的操作,请将 Queues 结合 Cloudflare Workers Cron Triggers 一起使用。另外,若需精准追踪队列的运行状况,建议您利用 Cloudflare Workers Analytics Engine 实时监控系统吞吐量与异常错误率。