Skip to content

Queue

The Queue component lets you add Cloudflare Queue to your app for reliable message delivery between workers.

Minimal Example

Create a basic queue with default settings.

ts
import { Queue } from "alchemy/cloudflare";

const queue = await Queue("my-queue", {
  name: "my-queue",
});

Queue with Custom Settings

Configure queue behavior with delivery delay and message retention.

ts
import { Queue } from "alchemy/cloudflare";

const queue = await Queue("delayed-queue", {
  name: "delayed-queue",
  settings: {
    deliveryDelay: 30, // 30 second delay
    messageRetentionPeriod: 86400, // Store messages for 1 day
    deliveryPaused: false,
  },
});

Bind to a Worker

Attach a queue to a worker for processing messages.

ts
import { Worker, Queue } from "alchemy/cloudflare";

const queue = await Queue("my-queue", {
  name: "my-queue",
});

await Worker("my-worker", {
  name: "my-worker",
  script: "console.log('Hello, world!')",
  bindings: {
    MY_QUEUE: queue,
  },
});

Queue with Dead Letter Queue

Configure a dead letter queue for handling failed messages.

ts
import { Queue } from "alchemy/cloudflare";

// Create the dead letter queue first
const dlq = await Queue("dlq", {
  name: "failed-messages-dlq",
});

// Create main queue with DLQ reference
const queue = await Queue("main-queue", {
  name: "main-queue",
  dlq: dlq, // or dlq: "failed-messages-dlq"
});

Configure Queue Consumer

Configure how a Worker consumes messages from the queue using eventSources:

ts
import { Worker, Queue } from "alchemy/cloudflare";

const queue = await Queue("processing-queue", {
  name: "processing-queue",
});

await Worker("processor", {
  entrypoint: "./src/processor.ts",
  eventSources: [{
    queue,
    settings: {
      batchSize: 10,           // Process 10 messages at once
      maxConcurrency: 3,       // Allow 3 concurrent invocations
      maxRetries: 5,           // Retry failed messages up to 5 times  
      maxWaitTimeMs: 2000,     // Wait up to 2 seconds to fill a batch
      retryDelay: 30,          // Wait 30 seconds before retrying failed messages
      deadLetterQueue: "failed-queue" // Send failed messages to DLQ
    }
  }]
});

Consumer Settings Options

SettingTypeDefaultDescription
batchSizenumber10Number of messages to deliver in a batch
maxConcurrencynumber2Maximum number of concurrent consumer worker invocations
maxRetriesnumber3Maximum number of retries for each message
maxWaitTimeMsnumber500Maximum time in milliseconds to wait for batch to fill
retryDelaynumber30Time in seconds to delay retry after a failure
deadLetterQueuestring | Queue-Dead letter queue for messages that exceed max retries