AWS SQS SDK

Initialising the SQS client

import { SQSClient } from "@aws-sdk/client-sqs";

const sqs = new SQSClient({ region: "us-east-1" });

Sending a message to the queue

import { SendMessageCommand } from "@aws-sdk/client-sqs";

const command = new SendMessageCommand({
  QueueUrl: queueUrl,
  MessageBody: messageBody,
  // Optional parameters
  DelaySeconds: 0,
  MessageAttributes: {
    CustomAttribute: {
      DataType: "String",
      StringValue: "CustomValue",
    },
  },
});

return await sqs.send(command);

Processing messages on the queue

import { ReceiveMessageCommand } from "@aws-sdk/client-sqs";

const command = new ReceiveMessageCommand({
  QueueUrl: queueUrl,
  MaxNumberOfMessages: 10,
  WaitTimeSeconds: 20, // Long polling
  VisibilityTimeout: 30, // Time other consumers won't see this message
});

const response = await sqs.send(command);

// Then do something

for (const message of response.Messages || []) {
  console.log(message);
}

Removing message from queue

import { DeleteMessageCommand } from "@aws-sdk/client-sqs";

for (const message of response.Messages || []) {
  await sqs.send(
    new DeleteMessageCommand({
      QueueUrl: queueUrl,
      ReceiptHandle: message.ReceiptHandle,
    }),
  );
}

Query a DLQ

const checkDLQ = async (dlqUrl: string) => {
  const command = new GetQueueAttributesCommand({
    QueueUrl: dlqUrl,
    AttributeNames: ["ApproximateNumberOfMessages"],
  });

  const response = await sqs.send(command);
  return response.Attributes?.ApproximateNumberOfMessages;
};