用途:Cloudflare Queues 是面向 Workers 的消息队列,用于在服务之间异步传递消息。支持推送(Worker 消费者)和拉取(HTTP API)两种消费模式,投递语义为至少一次(at-least-once)。
主要能力:
- 生产者通过绑定调用 send 和 sendBatch 发送消息,可设置 delaySeconds 延迟和 contentType。
- 消费者在 queue 处理函数中按批次接收消息,通过 msg.ack()、msg.retry({delaySeconds}) 逐条确认或重试,也可用 batch.ackAll()、batch.retryAll() 进行批级操作;逐条调用优先于批级。
- 消费者可配置 max_batch_size、max_batch_timeout、max_retries、max_concurrency、retry_delay 和 dead_letter_queue。
- 支持死信队列:超过 max_retries 的消息进入 DLQ,无消费者时保留 4 天。
- 支持投递延迟,可在发送、重试时设置,或创建队列时指定默认值,最大 12 小时。
- 消费者按积压自动扩缩,可设 max_concurrency;max_concurrency 为 1 时顺序处理。
- 拉取消费者通过 HTTP API 拉取和确认消息,可设 visibility_timeout_ms。
使用方式:用 npx wrangler queues create my-queue 创建队列,在 wrangler.jsonc 中配置 producers 和 consumers 绑定。管理命令包括 create、delete、list、info、pause-delivery、resume-delivery、purge 及 consumer add/remove。R2 等服务的对象创建事件可发送到队列。
限制:每条消息最大 128 KB,sendBatch 每次最多 100 条,批总量 ≤ 256 KB;账户队列上限 10,000,单队列吞吐 5,000 msg/sec,积压 25 GB,消息保留 4 天(最长 14),并发消费者 250,消费者时长 15 分钟,CPU 30 秒(可提升至 5 分钟),最大重试 100 次。拉取消费者无法解码 v8 内容类型。
注意:是至少一次投递,可能重复,需用幂等键处理;不要忽略死信队列;不要盲目设高并发;不要依赖精确一次投递。
定价:Workers 付费版每月含 100 万次操作,超出后 $0.40/百万次,无出口费用。具体计费与官方资料以 Cloudflare 文档为准。