sqs

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 21, 2025 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package sqs provides helpers for Amazon SQS operations.

Features

  • Send and receive messages
  • Batch operations with automatic chunking
  • Message attribute handling
  • Queue URL resolution from name

Client Creation

Create a client using AWS configuration:

cfg, err := aws.LoadConfig(ctx, aws.WithRegion("us-west-2"))
if err != nil {
    return err
}

client := sqs.NewClient(cfg)

Basic Operations

// Send a message
msgID, err := client.SendMessage(ctx, queueURL, "Hello World")

// Receive messages
messages, err := client.ReceiveMessages(ctx, queueURL, sqs.WithMaxMessages(10))

// Delete a message
err := client.DeleteMessage(ctx, queueURL, receiptHandle)

Testing

For testing, use the interface-based client:

mock := &MockSQSAPI{}
client := sqs.NewClientWithAPI(mock)

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrQueueNotFound is returned when a queue does not exist.
	ErrQueueNotFound = errors.New("sqs: queue not found")

	// ErrMessageNotFound is returned when a message does not exist.
	ErrMessageNotFound = errors.New("sqs: message not found")

	// ErrInvalidReceiptHandle is returned when a receipt handle is invalid.
	ErrInvalidReceiptHandle = errors.New("sqs: invalid receipt handle")
)

Common SQS errors.

Functions

This section is empty.

Types

type API added in v1.0.0

type API interface {
	SendMessage(ctx context.Context, params *sqs.SendMessageInput, optFns ...func(*sqs.Options)) (*sqs.SendMessageOutput, error)
	SendMessageBatch(ctx context.Context, params *sqs.SendMessageBatchInput, optFns ...func(*sqs.Options)) (*sqs.SendMessageBatchOutput, error)
	ReceiveMessage(ctx context.Context, params *sqs.ReceiveMessageInput, optFns ...func(*sqs.Options)) (*sqs.ReceiveMessageOutput, error)
	DeleteMessage(ctx context.Context, params *sqs.DeleteMessageInput, optFns ...func(*sqs.Options)) (*sqs.DeleteMessageOutput, error)
	DeleteMessageBatch(ctx context.Context, params *sqs.DeleteMessageBatchInput, optFns ...func(*sqs.Options)) (*sqs.DeleteMessageBatchOutput, error)
	GetQueueUrl(ctx context.Context, params *sqs.GetQueueUrlInput, optFns ...func(*sqs.Options)) (*sqs.GetQueueUrlOutput, error)
	GetQueueAttributes(ctx context.Context, params *sqs.GetQueueAttributesInput, optFns ...func(*sqs.Options)) (*sqs.GetQueueAttributesOutput, error)
	ChangeMessageVisibility(ctx context.Context, params *sqs.ChangeMessageVisibilityInput, optFns ...func(*sqs.Options)) (*sqs.ChangeMessageVisibilityOutput, error)
	PurgeQueue(ctx context.Context, params *sqs.PurgeQueueInput, optFns ...func(*sqs.Options)) (*sqs.PurgeQueueOutput, error)
}

API defines the SQS operations used by this package. This interface enables testing with mocks.

type BatchError added in v1.0.0

type BatchError struct {
	ID      string
	Code    string
	Message string
}

BatchError represents an error in a batch operation.

type Client added in v1.0.0

type Client struct {
	// contains filtered or unexported fields
}

Client provides SQS operations.

func NewClient added in v1.0.0

func NewClient(cfg *aws.Config) (*Client, error)

NewClient creates a new SQS client with the given configuration.

Example:

cfg, err := aws.LoadConfig(ctx)
if err != nil {
    return err
}
client := sqs.NewClient(cfg)

func NewClientWithAPI added in v1.0.0

func NewClientWithAPI(api API) *Client

NewClientWithAPI creates a client with a custom API implementation. Useful for testing with mocks.

Example:

mock := &MockSQSAPI{}
client := sqs.NewClientWithAPI(mock)

func (*Client) API added in v1.0.0

func (c *Client) API() API

API returns the underlying SQS API for direct SDK access.

func (*Client) ChangeMessageVisibility added in v1.0.0

func (c *Client) ChangeMessageVisibility(ctx context.Context, queueURL, receiptHandle string, timeoutSeconds int32) error

ChangeMessageVisibility changes the visibility timeout of a message.

Example:

err := client.ChangeMessageVisibility(ctx, queueURL, receiptHandle, 300)

func (*Client) DeleteMessage added in v1.0.0

func (c *Client) DeleteMessage(ctx context.Context, queueURL, receiptHandle string) error

DeleteMessage deletes a message from an SQS queue.

Example:

err := client.DeleteMessage(ctx, queueURL, message.ReceiptHandle)

func (*Client) DeleteMessageBatch added in v1.0.0

func (c *Client) DeleteMessageBatch(ctx context.Context, queueURL string, receiptHandles []string) ([]string, []BatchError, error)

DeleteMessageBatch deletes multiple messages from an SQS queue. Automatically handles the 10-message limit per batch.

Example:

handles := []string{msg1.ReceiptHandle, msg2.ReceiptHandle}
successful, failed, err := client.DeleteMessageBatch(ctx, queueURL, handles)

func (*Client) GetQueueURL added in v1.0.0

func (c *Client) GetQueueURL(ctx context.Context, queueName string) (string, error)

GetQueueURL resolves a queue name to a queue URL.

Example:

queueURL, err := client.GetQueueURL(ctx, "my-queue")

func (*Client) PurgeQueue added in v1.0.0

func (c *Client) PurgeQueue(ctx context.Context, queueURL string) error

PurgeQueue deletes all messages from a queue. This operation can only be performed once every 60 seconds.

Example:

err := client.PurgeQueue(ctx, queueURL)

func (*Client) ReceiveMessages added in v1.0.0

func (c *Client) ReceiveMessages(ctx context.Context, queueURL string, opts ...ReceiveOption) ([]Message, error)

ReceiveMessages receives messages from an SQS queue. Messages are automatically HTML unescaped.

Example:

messages, err := client.ReceiveMessages(ctx, queueURL,
    sqs.WithMaxMessages(10),
    sqs.WithWaitTimeSeconds(20),
)
for _, msg := range messages {
    fmt.Println(msg.Body)
    // Process message...
    client.DeleteMessage(ctx, queueURL, msg.ReceiptHandle)
}

func (*Client) SendMessage added in v1.0.0

func (c *Client) SendMessage(ctx context.Context, queueURL, body string, opts ...SendOption) (string, error)

SendMessage sends a message to an SQS queue. Returns the message ID on success.

Example:

msgID, err := client.SendMessage(ctx, queueURL, "Hello World")

func (*Client) SendMessageBatch added in v1.0.0

func (c *Client) SendMessageBatch(ctx context.Context, queueURL string, bodies []string) ([]string, []BatchError, error)

SendMessageBatch sends multiple messages to an SQS queue. Automatically handles the 10-message limit per batch. Returns the IDs of successfully sent messages and any errors.

Example:

messages := []string{"msg1", "msg2", "msg3"}
successful, failed, err := client.SendMessageBatch(ctx, queueURL, messages)

type Message added in v1.0.0

type Message struct {
	ID            string
	Body          string
	ReceiptHandle string
	Attributes    map[string]string
	MD5OfBody     string
}

Message represents an SQS message.

type ReceiveOption added in v1.0.0

type ReceiveOption func(*receiveOptions)

ReceiveOption configures ReceiveMessages operations.

func WithAttributeNames added in v1.0.0

func WithAttributeNames(names ...types.QueueAttributeName) ReceiveOption

WithAttributeNames specifies which system attributes to retrieve.

Example:

messages, err := client.ReceiveMessages(ctx, queueURL,
    sqs.WithAttributeNames(types.QueueAttributeNameAll))

func WithMaxMessages added in v1.0.0

func WithMaxMessages(n int32) ReceiveOption

WithMaxMessages sets the maximum number of messages to receive. Default is 1, maximum is 10.

Example:

messages, err := client.ReceiveMessages(ctx, queueURL, sqs.WithMaxMessages(10))

func WithMessageAttributeNames added in v1.0.0

func WithMessageAttributeNames(names ...string) ReceiveOption

WithMessageAttributeNames specifies which message attributes to retrieve.

Example:

messages, err := client.ReceiveMessages(ctx, queueURL,
    sqs.WithMessageAttributeNames("Author", "Timestamp"))

func WithVisibilityTimeout added in v1.0.0

func WithVisibilityTimeout(seconds int32) ReceiveOption

WithVisibilityTimeout sets the visibility timeout in seconds.

Example:

messages, err := client.ReceiveMessages(ctx, queueURL, sqs.WithVisibilityTimeout(60))

func WithWaitTimeSeconds added in v1.0.0

func WithWaitTimeSeconds(seconds int32) ReceiveOption

WithWaitTimeSeconds enables long polling.

Example:

messages, err := client.ReceiveMessages(ctx, queueURL, sqs.WithWaitTimeSeconds(20))

type SendOption added in v1.0.0

type SendOption func(*sendOptions)

SendOption configures SendMessage operations.

func WithDeduplicationID added in v1.0.0

func WithDeduplicationID(id string) SendOption

WithDeduplicationID sets the deduplication ID for FIFO queues.

Example:

msgID, err := client.SendMessage(ctx, queueURL, body, sqs.WithDeduplicationID("unique-id"))

func WithDelaySeconds added in v1.0.0

func WithDelaySeconds(seconds int32) SendOption

WithDelaySeconds sets the message delay in seconds.

Example:

msgID, err := client.SendMessage(ctx, queueURL, body, sqs.WithDelaySeconds(60))

func WithMessageAttributes added in v1.0.0

func WithMessageAttributes(attrs map[string]types.MessageAttributeValue) SendOption

WithMessageAttributes sets message attributes.

Example:

attrs := map[string]types.MessageAttributeValue{
    "Author": {DataType: aws.String("String"), StringValue: aws.String("John")},
}
msgID, err := client.SendMessage(ctx, queueURL, body, sqs.WithMessageAttributes(attrs))

func WithMessageGroupID added in v1.0.0

func WithMessageGroupID(groupID string) SendOption

WithMessageGroupID sets the message group ID for FIFO queues.

Example:

msgID, err := client.SendMessage(ctx, queueURL, body, sqs.WithMessageGroupID("group-1"))

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL