SQS

Simple Queue Service is a fully managed queue service, means AWS handles the infrastructure and scaling. The API is indeed a bit simpler compared to RabbitMQ or Kafka.

Create a Queue

aws sqs create-queue --queue-name queue0

Using the SDK

bun add @aws-sdk/client-sqs

Publish a Message

Add sqs-send.ts:

import {
  SQSClient,
  SendMessageCommand,
  GetQueueUrlCommand
} from "@aws-sdk/client-sqs"

const sqs = new SQSClient({})

const {QueueUrl} = await sqs.send(new GetQueueUrlCommand({QueueName: "queue0"}))

const data = await sqs.send(new SendMessageCommand({
  QueueUrl,
  MessageBody: "Hello, World!"
}))
console.log(data.MessageId)

Run it with bun sqs-send.ts.

Then add sqs-receive.ts:

import {
  SQSClient,
  ReceiveMessageCommand,
  DeleteMessageCommand,
  GetQueueUrlCommand
} from "@aws-sdk/client-sqs"

const sqs = new SQSClient({})

const {QueueUrl} = await sqs.send(new GetQueueUrlCommand({QueueName: "queue0"}))

const {Messages} = await sqs.send(new ReceiveMessageCommand({
  QueueUrl,
  MaxNumberOfMessages: 10,
  WaitTimeSeconds: 20
}))

if (Messages) {
  Messages.forEach(async message => {
    console.log("Message:", message.Body)
    await sqs.send(new DeleteMessageCommand({
      QueueUrl,
      ReceiptHandle: message.ReceiptHandle
    }))
    console.log("Message deleted")
  })
}

Run it with bun sqs-receive.ts.