Examples

Basic send with Task semantics

import { Queue, createInMemory } from "@anabranch/queue";

const connector = createInMemory();
const queue = await Queue.connect(connector).run();

const messageId = await queue
  .send("notifications", { userId: 123, type: "welcome" })
  .run();

Stream messages with concurrent processing and error collection

const connector = createInMemory();
const queue = await Queue.connect(connector).run();

const { successes, errors } = await queue
  .stream("notifications")
  .withConcurrency(5)
  .map(async (msg) => await sendEmail(msg.data))
  .tapErr((err) => logError(err))
  .partition();

Delayed messages with visibility timeout

import { Queue, createInMemory } from "@anabranch/queue";

const connector = createInMemory({ visibilityTimeout: 60_000 });
const queue = await Queue.connect(connector).run();

await queue.send("notifications", reminder, { delayMs: 30_000 }).run();

Dead letter queue with max attempts

import { Queue, createInMemory } from "@anabranch/queue";

const connector = createInMemory({
  queues: {
    orders: {
      maxAttempts: 3,
      deadLetterQueue: "orders-dlq",
    },
  },
});
const queue = await Queue.connect(connector).run();

await queue.nack("orders", msg.id, { deadLetter: true }).run();