bullmq vs bull vs agenda vs bee-queue vs kue
ジョブキューライブラリ
bullmqbullagendabee-queuekue類似パッケージ:
ジョブキューライブラリ

ジョブキューライブラリは、バックグラウンドでのタスク処理を管理するためのツールです。これらのライブラリは、非同期処理を効率的に行うために、タスクをキューに追加し、順次実行する機能を提供します。これにより、アプリケーションのパフォーマンスが向上し、ユーザー体験が向上します。特に、重い処理や時間のかかる操作をバックグラウンドで実行する際に役立ちます。

npmのダウンロードトレンド
3 年
GitHub Starsランキング
統計詳細
パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
bullmq2,139,1488,0052.27 MB3054日前MIT
bull1,119,92216,183309 kB1481年前MIT
agenda136,7119,585353 kB356-MIT
bee-queue36,4813,994106 kB362年前MIT
kue18,8859,458-2889年前MIT
機能比較: bullmq vs bull vs agenda vs bee-queue vs kue

パフォーマンス

  • bullmq:

    BullMQは、Bullの機能を拡張しており、複雑なジョブフローを効率的に処理できます。パフォーマンスも向上しており、スケーラビリティが高いです。

  • bull:

    Bullは、Redisを使用しており、優れたパフォーマンスを提供します。特に、エラーハンドリングやリトライ機能が充実しているため、信頼性の高いジョブ処理が可能です。

  • agenda:

    Agendaは、MongoDBをバックエンドに使用するため、データベースのパフォーマンスに依存します。高トラフィックなアプリケーションでは、MongoDBのスケーラビリティが重要です。

  • bee-queue:

    Bee-Queueは、Redisのシンプルさとスピードを活かしており、高スループットのタスク処理に優れています。特に軽量なジョブ処理に最適です。

  • kue:

    Kueは、Redisを使用しており、ジョブの監視や管理が容易ですが、他のライブラリと比較してパフォーマンスが劣る場合があります。

選び方: bullmq vs bull vs agenda vs bee-queue vs kue
  • bullmq:

    BullMQは、Bullの進化版で、より高度な機能を提供します。複雑なジョブフローや依存関係を管理する必要がある場合に最適です。

  • bull:

    Bullは、Redisを使用した強力なジョブキューライブラリで、複雑なジョブの管理やリトライ機能が必要な場合に適しています。優れたエラーハンドリング機能を備えています。

  • agenda:

    Agendaは、MongoDBを使用したシンプルなジョブスケジューリングを必要とする場合に適しています。シンプルなAPIで、定期的なジョブや遅延ジョブを簡単に設定できます。

  • bee-queue:

    Bee-Queueは、Redisを使用した軽量なジョブキューを必要とする場合に最適です。シンプルで高速なパフォーマンスを提供し、特に高スループットのタスク処理に向いています。

  • kue:

    Kueは、Redisを使用したジョブキューライブラリで、ユーザーインターフェースを提供し、ジョブの監視や管理が容易です。視覚的な管理が必要な場合に適しています。

bullmq のREADME



The fastest, most reliable, Redis-based distributed queue for Node.
Carefully written for rock solid stability and atomicity.

Read the documentation

Follow @manast for *important* Bull/BullMQ/BullMQ-Pro news and updates!

🛠 Tutorials

You can find tutorials and news in this blog: https://blog.taskforce.sh/

News 🚀

🌐 Language agnostic BullMQ

Do you need to work with BullMQ on platforms other than Node.js? If so, check out the BullMQ Proxy

Official FrontEnd

Taskforce.sh, Inc

Supercharge your queues with a professional front end:

  • Get a complete overview of all your queues.
  • Inspect jobs, search, retry, or promote delayed jobs.
  • Metrics and statistics.
  • and many more features.

Sign up at Taskforce.sh

🚀 Sponsors 🚀

Dragonfly Dragonfly is a new Redis™ drop-in replacement that is fully compatible with BullMQ and brings some important advantages over Redis™ such as massive better performance by utilizing all CPU cores available and faster and more memory efficient data structures. Read more here on how to use it with BullMQ.

Used by

Some notable organizations using BullMQ:

Microsoft Vendure Datawrapper Nest Langfuse
Curri Novu NoCodeDB Infisical

The gist

Install:

$ yarn add bullmq

Add jobs to the queue:

import { Queue } from 'bullmq';

const queue = new Queue('Paint');

queue.add('cars', { color: 'blue' });

Process the jobs in your workers:

import { Worker } from 'bullmq';

const worker = new Worker('Paint', async job => {
  if (job.name === 'cars') {
    await paintCar(job.data.color);
  }
});

Listen to jobs for completion:

import { QueueEvents } from 'bullmq';

const queueEvents = new QueueEvents('Paint');

queueEvents.on('completed', ({ jobId }) => {
  console.log('done painting');
});

queueEvents.on(
  'failed',
  ({ jobId, failedReason }: { jobId: string; failedReason: string }) => {
    console.error('error painting', failedReason);
  },
);

Adds jobs with parent-child relationship:

import { FlowProducer } from 'bullmq';

const flow = new FlowProducer();

const originalTree = await flow.add({
  name: 'root-job',
  queueName: 'topQueueName',
  data: {},
  children: [
    {
      name: 'child-job',
      data: { idx: 0, foo: 'bar' },
      queueName: 'childrenQueueName',
      children: [
        {
          name: 'grandchild-job',
          data: { idx: 1, foo: 'bah' },
          queueName: 'grandChildrenQueueName'
        },
        {
          name: 'grandchild-job',
          data: { idx: 2, foo: 'baz' },
          queueName: 'grandChildrenQueueName'
        },
      ],
    },
    {
      name: 'child-job',
      data: { idx: 3, foo: 'foo' },
      queueName: 'childrenQueueName'
    },
  ],
});

This is just scratching the surface, check all the features and more in the official documentation

Feature Comparison

Since there are a few job queue solutions, here is a table comparing them:

FeatureBullMQ-ProBullMQBullKueBeeAgenda
Backendredisredisredisredisredismongo
Observables
Group Rate Limit
Group Support
Batches Support
Parent/Child Dependencies
Deduplication (Debouncing)
Deduplication (Throttling)
Priorities
Concurrency
Delayed jobs
Global events
Rate Limiter
Pause/Resume
Sandboxed worker
Repeatable jobs
Atomic ops
Persistence
UI
Optimized forJobs / MessagesJobs / MessagesJobs / MessagesJobsMessagesJobs

Contributing

Fork the repo, make some changes, submit a pull-request! Here is the contributing doc that has more details.

Thanks

Thanks for all the contributors that made this library possible, also a special mention to Leon van Kammen that kindly donated his npm bullmq repo.