Cloudflare Workers Queues:可靠的异步处理队列

通过本文深入了解如何使用 Cloudflare Workers Queues 轻松构建出高度可靠的异步处理流水线,我们将为您详细解析生产者与消费者模式的设计最佳实践、高效的批处理配置策略、死信队列机制的实际运用技巧,以及完善的错误处理与自动重试机制,此方案能有效解耦各种复杂业务请求,并大幅度增强系统的弹性与响应速度。

Alex Chen
Alex Chen
June 1, 202611 min read
其他语言:Deutsch · English

太长不看: Cloudflare Queues 是一项针对 Workers 的全球消息队列服务,用于处理异步任务、负载均衡以及重试逻辑。本指南涵盖了队列配置、生产者/消费者模式、批处理以及死信队列。

引言

异步处理将请求处理与高开销的操作解耦。您无需在 HTTP 请求期间处理电子邮件的发送任务,而是可以将其排入队列并独立进行处理。要了解有关结合 Durable Objects 实现实时协调功能的更多异步模式,请参阅我们的 Cloudflare Workers Durable Objects 专属指南。Queues 提供至少一次的交付保障、自动重试以及可配置的并发度。

队列配置

toml
# 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"
      }
    }
  }
}

生产者模式

ts
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 })
  },
}

消费者处理程序

ts
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 实时监控系统吞吐量与异常错误率。