无需 Redis:零配置作业队列 for Bun

发布: (2026年2月2日 GMT+8 09:24)
2 分钟阅读
原文: Dev.to

Source: Dev.to

在不使用 Redis 的情况下使用 Bunqueue

import { Queue, Worker } from 'bunqueue/client';

const queue = new Queue('tasks', { embedded: true });

await queue.add('process', { userId: 123 });

new Worker('tasks', async (job) => {
  return { done: true };
}, { embedded: true });

这就是完整的基础设施——无需 Redis、无需 Docker、无需连接字符串、也不需要单独的服务器进程。

嵌入模式

当设置 embedded: true 时,Bunqueue 会在你的项目中创建一个 SQLite 数据库,并在进程内管理所有内容:

Your App Process
├── Your Code
├── Queue (in‑memory priority queues)
├── Worker (processes jobs)
└── SQLite (./data/bunq.db)

一个进程。一个文件。完成。

示例:邮件队列

import { Queue, Worker } from 'bunqueue/client';

interface EmailJob {
  to: string;
  template: string;
  data: Record;
}

const emails = new Queue('emails', { embedded: true });

// 从你的 API 路由添加任务
await emails.add(
  'welcome',
  {
    to: 'user@example.com',
    template: 'welcome',
    data: { name: 'John' },
  },
  {
    attempts: 3,
    backoff: 5000,
    priority: 10,
  }
);

// 在同一应用中处理
const worker = new Worker(
  'emails',
  async (job) => {
    await job.updateProgress(10, 'Loading template');

    const html = await renderTemplate(job.data.template, job.data.data);

    await job.updateProgress(50, 'Sending');
    await sendEmail(job.data.to, html);

    return { sent: true };
  },
  {
    embedded: true,
    concurrency: 5,
  }
);

worker.on('failed', (job, err) => {
  console.error(`Email to ${job.data.to} failed: ${err.message}`);
});

安装

bun add bunqueue

资源

Back to Blog

相关文章

阅读更多 »