You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:20:05