Queues

Queues provide scalable, decoupled, asynchronous messaging between services. Unlike topics, messages in queues are pulled by consumers rather than pushed, making queues perfect for batch processing and handling workload spikes.

Quick Start

Here's a minimal example to get you started:

import { queue } from '@nitric/sdk'
const taskQueue = queue('tasks').allow('enqueue', 'dequeue')
// Send a message to the queue
await taskQueue.enqueue({
task: 'process-data',
data: {
/* ... */
},
})
// Process messages from the queue
const messages = await taskQueue.dequeue(10)
for (const message of messages) {
console.log(`Processing: ${message.task}`)
await message.complete()
}

Core Concepts

Queues

A queue is a named resource where messages can be sent and retrieved. Unlike topics, messages in queues are pulled by consumers rather than pushed, making queues ideal for batch processing and handling workload spikes.

Message Leasing

When messages are dequeued, they are temporarily hidden from other consumers through a leasing mechanism. This prevents multiple consumers from processing the same message simultaneously.

Permissions

Queues require explicit permissions for operations:

  • enqueue: Send messages to the queue
  • dequeue: Retrieve messages from the queue

Common Operations

Sending Messages

const queue = queue('my-queue').allow('enqueue')
// Send a single message
await queue.enqueue({
message: 'Hello consumer!',
})
// Send multiple messages
await queue.enqueue([{ message: 'Task 1' }, { message: 'Task 2' }])

Processing Messages

const queue = queue('my-queue').allow('dequeue')
// Dequeue and process messages
const messages = await queue.dequeue(10)
for (const message of messages) {
console.log(`Processing: ${message.message}`)
await message.complete()
}

Cloud Provider Support

Each cloud provider comes with a set of default services used when deploying resources. You can find the default services for each cloud provider below.

Queues are mapped to SQS in AWS. For more details about the AWS implementation, including configuration options and limitations, see the AWS Queues documentation.

When running locally, queues use a local implementation for development and testing.

For best practices and patterns when working with queues, including handling message delivery guarantees and idempotency, see our Async Messaging Patterns Guide.

Last updated on Apr 3, 2025