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,
});

Route failures to a dead-letter queue

const dlq = yield* SQS.Queue("OrdersDLQ");
const orders = yield* SQS.Queue("Orders", {
redrivePolicy: {
deadLetterTargetArn: dlq.queueArn,
maxReceiveCount: 3,
},
});

Authorize source queues on the dead-letter queue

const dlq = yield* SQS.Queue("OrdersDLQ", {
redriveAllowPolicy: {
redrivePermission: "byQueue",
sourceQueueArns: [orders.queueArn],
},
});

SSE-SQS (SQS-managed keys)

const queue = yield* SQS.Queue("SecureQueue", {
sqsManagedSseEnabled: true,
});

SSE-KMS (AWS-managed key)

const queue = yield* SQS.Queue("KmsQueue", {
kmsMasterKeyId: "alias/aws/sqs",
kmsDataKeyReusePeriodSeconds: 300,
});

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

// init
const sendMessage = yield* SQS.SendMessage(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.consumeQueueMessages(queue,
Effect.fn(function* (message) {
yield* Effect.log(`Received: ${message.body}`);
}),
);