Skip to content

Queue

Source: src/AWS/SQS/Queue.ts

An Amazon SQS queue for reliable, decoupled message processing.

Queue owns the lifecycle of a standard or FIFO SQS queue. A queue name is auto-generated from the app, stage, and logical ID unless you provide one explicitly. FIFO queues automatically append the .fifo suffix.

Standard Queue

import * as SQS from "alchemy/AWS/SQS";
const queue = yield* SQS.Queue("OrdersQueue");

FIFO Queue

const queue = yield* SQS.Queue("OrdersFifoQueue", {
fifo: true,
contentBasedDeduplication: true,
});

Queue with Custom Settings

const queue = yield* SQS.Queue("ProcessingQueue", {
visibilityTimeout: 120,
messageRetentionPeriod: 86400,
receiveMessageWaitTimeSeconds: 20,
});

Bind send operations in the init phase and use them in runtime handlers.

// init
const sendMessage = yield* SQS.SendMessage.bind(queue);
return {
fetch: Effect.gen(function* () {
// runtime
yield* sendMessage({
MessageBody: JSON.stringify({ orderId: "123" }),
});
return HttpServerResponse.text("Queued");
}),
};

Process messages from a queue using a Lambda event source mapping. Messages are automatically deleted after successful processing.

// init
yield* SQS.messages(queue).process(
Effect.fn(function* (message) {
yield* Effect.log(`Received: ${message.body}`);
}),
);