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.
Creating Queues
Section titled “Creating Queues”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,});Dead-Letter Queues
Section titled “Dead-Letter Queues”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], },});Encryption
Section titled “Encryption”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,});Sending Messages
Section titled “Sending Messages”Bind send operations in the init phase and use them in runtime handlers.
// initconst sendMessage = yield* SQS.SendMessage(queue);
return { fetch: Effect.gen(function* () { // runtime yield* sendMessage({ MessageBody: JSON.stringify({ orderId: "123" }), }); return HttpServerResponse.text("Queued"); }),};Event Sources
Section titled “Event Sources”Process messages from a queue using a Lambda event source mapping. Messages are automatically deleted after successful processing.
// inityield* SQS.consumeQueueMessages(queue, Effect.fn(function* (message) { yield* Effect.log(`Received: ${message.body}`); }),);