如何在NuxtHub 0.8.25中配置Cloudflare Queue消费者?
关于NuxtHub + Cloudflare Queues消费者不触发的问题
我正在开发一个基于Nuxt、NuxtHub和Cloudflare Queues的项目:
- ✅ 已成功实现消息发布到队列,代码如下:
const { cloudflare } = event.context; console.log("Publishing to queue:", log); await cloudflare.env.COMPARISON_QUEUE.send(log);
- 📦 当前
nuxt.config.ts配置:
export default defineNuxtConfig({ compatibilityDate: "2024-11-01", devtools: { enabled: true }, modules: [ "@nuxt/eslint", "@nuxt/ui-pro", "@nuxt/content", "@nuxt/icon", "@nuxthub/core" ], hub: { workers: true, database: true, bindings: { queue: { COMPARISON_QUEUE: { queue_name: "comparison-queue", } }, observability: { logs: true } } } });
- 🧩 在
server/plugin/queue-consumer.ts中编写了队列消费者:
import { defineNitroPlugin } from 'nitropack/runtime'; import { processMessages } from '../queue/comparison.consumer'; export default defineNitroPlugin((nitroApp) => { nitroApp.hooks.hook('cloudflare:queue', async (batchWrapper, env, ctx) => { console.log('[Queue] Batch wrapper received:', JSON.stringify(batchWrapper, null, 2)); const batch = batchWrapper?.event || batchWrapper?.batch || batchWrapper; const messages = batch?.messages || []; console.log('[Queue] Extracted messages:', messages.length); if (ctx && typeof ctx.waitUntil === 'function') { try { ctx.waitUntil(processMessages(batch, env, batchWrapper)); } catch (error) { console.error('[Queue] Error in processMessages:', error); } } else { try { await processMessages(batch, env, batchWrapper); } catch (error) { console.error('[Queue] Error in processMessages (fallback):', error); } } for (const message of messages) { try { console.log('[Queue] Processing message ID:', message.id); if (message && typeof message.ack === 'function') { message.ack(); } } catch (err) { console.error('[Queue] Error ACK:', err); if (message && typeof message.retry === 'function') { message.retry({ delaySeconds: 30 }); } } } }); });
- 该插件在未使用NuxtHub的普通Nuxt+Cloudflare Workers应用中可以正常运行,但使用
@nuxthub/core版本0.8.25后,完全看不到消费者被调用的日志或迹象。
问题
我是否需要在NuxtHub的配置中显式声明队列消费者?或者需要执行其他操作才能让消费者正常工作?
内容的提问来源于stack exchange,提问作者Maxime VANDROMME
相关产品推荐
相关产品推荐

