无需 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