Bullstudio

Queue Adapters

Expose BullMQ or Bull queues to an embedded dashboard.

Queue adapters expose host-owned queues to an embedded dashboard.

BullMQ

pnpm add @bullstudio/bullmq-adapter bullmq
import { createBullMqQueueAdapter } from "@bullstudio/bullmq-adapter";
import { Queue } from "bullmq";

const emailQueue = new Queue("email", { connection });

const emailQueueAdapter = createBullMqQueueAdapter(emailQueue, {
  key: "email",
  label: "Email",
});

Capabilities:

CapabilitySupported
Job lists and detailsyes
Job logsyes
Retry jobsyes
Remove jobsyes
Pause and resume queuesyes
Worker countsyes
BullMQ flowsyes

Bull v4

pnpm add @bullstudio/bull-adapter bull
import { createBullQueueAdapter } from "@bullstudio/bull-adapter";
import Bull from "bull";

const emailQueue = new Bull("email", {
  redis: process.env.REDIS_URL,
});

const emailQueueAdapter = createBullQueueAdapter(emailQueue, {
  key: "email",
  label: "Email",
});

Capabilities:

CapabilitySupported
Job lists and detailsyes
Job logsyes
Retry jobsyes
Remove jobsyes
Pause and resume queuesyes
Worker countsyes
BullMQ flowsno

Adapter options

OptionDescriptionDefault
keyStable Bullstudio queue key. Must be unique in one dashboard instance.Queue name
labelHuman-facing queue label.Queue name

Use custom keys when queue names can collide in one dashboard instance.

bullstudio({
  queues: [
    createBullMqQueueAdapter(emailPrimaryQueue, {
      key: "email-primary",
      label: "Email Primary",
    }),
    createBullMqQueueAdapter(emailBackfillQueue, {
      key: "email-backfill",
      label: "Email Backfill",
    }),
  ],
});

Lifecycle

Bullstudio does not close supplied queues or Redis connections.

process.once("SIGTERM", async () => {
  await emailQueue.close();
  await connection.quit();
  process.exit(0);
});

On this page