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 ¶
- Variables
- type API
- type BatchError
- type Client
- func (c *Client) API() API
- func (c *Client) ChangeMessageVisibility(ctx context.Context, queueURL, receiptHandle string, timeoutSeconds int32) error
- func (c *Client) DeleteMessage(ctx context.Context, queueURL, receiptHandle string) error
- func (c *Client) DeleteMessageBatch(ctx context.Context, queueURL string, receiptHandles []string) ([]string, []BatchError, error)
- func (c *Client) GetQueueURL(ctx context.Context, queueName string) (string, error)
- func (c *Client) PurgeQueue(ctx context.Context, queueURL string) error
- func (c *Client) ReceiveMessages(ctx context.Context, queueURL string, opts ...ReceiveOption) ([]Message, error)
- func (c *Client) SendMessage(ctx context.Context, queueURL, body string, opts ...SendOption) (string, error)
- func (c *Client) SendMessageBatch(ctx context.Context, queueURL string, bodies []string) ([]string, []BatchError, error)
- type Message
- type ReceiveOption
- type SendOption
Constants ¶
This section is empty.
Variables ¶
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
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
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
NewClientWithAPI creates a client with a custom API implementation. Useful for testing with mocks.
Example:
mock := &MockSQSAPI{}
client := sqs.NewClientWithAPI(mock)
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
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
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
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"))