CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-amazonaws--aws-java-sdk-sqs

The AWS Java SDK for Amazon SQS module provides client classes for communicating with Amazon Simple Queue Service

Pending
Overview
Eval results
Files

message-operations.mddocs/

Message Operations

Message operations provide the core functionality for sending, receiving, and deleting messages in Amazon SQS queues. This includes both individual message operations and efficient batch operations for high-throughput scenarios.

Send Messages

Send Single Message

Send individual messages to a queue with optional attributes and configuration.

SendMessageResult sendMessage(SendMessageRequest request);

// Convenience method
SendMessageResult sendMessage(String queueUrl, String messageBody);

class SendMessageRequest extends AmazonWebServiceRequest {
    SendMessageRequest();
    SendMessageRequest(String queueUrl, String messageBody);
    
    String getQueueUrl();
    SendMessageRequest withQueueUrl(String queueUrl);
    
    String getMessageBody();
    SendMessageRequest withMessageBody(String messageBody);
    
    Integer getDelaySeconds();
    SendMessageRequest withDelaySeconds(Integer delaySeconds);
    
    Map<String, MessageAttributeValue> getMessageAttributes();
    SendMessageRequest withMessageAttributes(Map<String, MessageAttributeValue> messageAttributes);
    SendMessageRequest addMessageAttributesEntry(String key, MessageAttributeValue value);
    
    Map<String, MessageSystemAttributeValue> getMessageSystemAttributes();
    SendMessageRequest withMessageSystemAttributes(Map<String, MessageSystemAttributeValue> messageSystemAttributes);
    
    // FIFO queue specific
    String getMessageDeduplicationId();
    SendMessageRequest withMessageDeduplicationId(String messageDeduplicationId);
    
    String getMessageGroupId();
    SendMessageRequest withMessageGroupId(String messageGroupId);
}

class SendMessageResult {
    String getMD5OfBody();
    String getMD5OfMessageAttributes();
    String getMessageId();
    String getSequenceNumber(); // FIFO queues only
}

Usage Example:

// Basic message send
SendMessageRequest request = new SendMessageRequest()
    .withQueueUrl("https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue")
    .withMessageBody("Hello, SQS!");

SendMessageResult result = client.sendMessage(request);
System.out.println("Message ID: " + result.getMessageId());

// Message with attributes
MessageAttributeValue attribute = new MessageAttributeValue()
    .withDataType("String")
    .withStringValue("OrderProcessing");

SendMessageRequest requestWithAttrs = new SendMessageRequest()
    .withQueueUrl(queueUrl)
    .withMessageBody("Order data: {...}")
    .addMessageAttributesEntry("MessageType", attribute)
    .withDelaySeconds(30); // Delay 30 seconds

client.sendMessage(requestWithAttrs);

// FIFO queue message
SendMessageRequest fifoRequest = new SendMessageRequest()
    .withQueueUrl("https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue.fifo")
    .withMessageBody("FIFO message")
    .withMessageGroupId("group1")
    .withMessageDeduplicationId("unique-id-123");

client.sendMessage(fifoRequest);

Send Batch Messages

Send up to 10 messages in a single API call for improved throughput and cost efficiency.

SendMessageBatchResult sendMessageBatch(SendMessageBatchRequest request);

// Convenience method
SendMessageBatchResult sendMessageBatch(String queueUrl, List<SendMessageBatchRequestEntry> entries);

class SendMessageBatchRequest extends AmazonWebServiceRequest {
    String getQueueUrl();
    SendMessageBatchRequest withQueueUrl(String queueUrl);
    
    List<SendMessageBatchRequestEntry> getEntries();
    SendMessageBatchRequest withEntries(List<SendMessageBatchRequestEntry> entries);
    SendMessageBatchRequest withEntries(SendMessageBatchRequestEntry... entries);
}

class SendMessageBatchRequestEntry {
    String getId();
    SendMessageBatchRequestEntry withId(String id);
    
    String getMessageBody();
    SendMessageBatchRequestEntry withMessageBody(String messageBody);
    
    Integer getDelaySeconds();
    SendMessageBatchRequestEntry withDelaySeconds(Integer delaySeconds);
    
    Map<String, MessageAttributeValue> getMessageAttributes();
    SendMessageBatchRequestEntry withMessageAttributes(Map<String, MessageAttributeValue> messageAttributes);
    
    String getMessageDeduplicationId();
    SendMessageBatchRequestEntry withMessageDeduplicationId(String messageDeduplicationId);
    
    String getMessageGroupId();
    SendMessageBatchRequestEntry withMessageGroupId(String messageGroupId);
}

class SendMessageBatchResult {
    List<SendMessageBatchResultEntry> getSuccessful();
    List<BatchResultErrorEntry> getFailed();
}

class SendMessageBatchResultEntry {
    String getId();
    String getMD5OfBody();
    String getMD5OfMessageAttributes();
    String getMessageId();
    String getSequenceNumber();
}

Usage Example:

// Create batch entries
List<SendMessageBatchRequestEntry> entries = Arrays.asList(
    new SendMessageBatchRequestEntry()
        .withId("msg1")
        .withMessageBody("First message"),
    new SendMessageBatchRequestEntry()
        .withId("msg2")
        .withMessageBody("Second message")
        .withDelaySeconds(60),
    new SendMessageBatchRequestEntry()
        .withId("msg3")
        .withMessageBody("Third message")
        .addMessageAttributesEntry("Priority", 
            new MessageAttributeValue().withDataType("String").withStringValue("High"))
);

SendMessageBatchRequest batchRequest = new SendMessageBatchRequest()
    .withQueueUrl(queueUrl)
    .withEntries(entries);

SendMessageBatchResult batchResult = client.sendMessageBatch(batchRequest);

// Process results
for (SendMessageBatchResultEntry success : batchResult.getSuccessful()) {
    System.out.println("Sent message: " + success.getId() + " -> " + success.getMessageId());
}

for (BatchResultErrorEntry error : batchResult.getFailed()) {
    System.err.println("Failed message: " + error.getId() + " - " + error.getMessage());
}

Receive Messages

Receive Messages from Queue

Retrieve messages from a queue with configurable options for long polling, message attributes, and batch size.

ReceiveMessageResult receiveMessage(ReceiveMessageRequest request);

// Convenience method
ReceiveMessageResult receiveMessage(String queueUrl);

class ReceiveMessageRequest extends AmazonWebServiceRequest {
    ReceiveMessageRequest();
    ReceiveMessageRequest(String queueUrl);
    
    String getQueueUrl();
    ReceiveMessageRequest withQueueUrl(String queueUrl);
    
    List<String> getAttributeNames();
    ReceiveMessageRequest withAttributeNames(List<String> attributeNames);
    ReceiveMessageRequest withAttributeNames(String... attributeNames);
    ReceiveMessageRequest withAttributeNames(QueueAttributeName... attributeNames);
    
    List<String> getMessageAttributeNames();
    ReceiveMessageRequest withMessageAttributeNames(List<String> messageAttributeNames);
    ReceiveMessageRequest withMessageAttributeNames(String... messageAttributeNames);
    
    Integer getMaxNumberOfMessages();
    ReceiveMessageRequest withMaxNumberOfMessages(Integer maxNumberOfMessages);
    
    Integer getVisibilityTimeout();
    ReceiveMessageRequest withVisibilityTimeout(Integer visibilityTimeout);
    
    Integer getWaitTimeSeconds();
    ReceiveMessageRequest withWaitTimeSeconds(Integer waitTimeSeconds);
    
    String getReceiveRequestAttemptId();
    ReceiveMessageRequest withReceiveRequestAttemptId(String receiveRequestAttemptId);
}

class ReceiveMessageResult {
    List<Message> getMessages();
}

class Message {
    String getMessageId();
    String getReceiptHandle();
    String getMD5OfBody();
    String getBody();
    Map<String, String> getAttributes();
    String getMD5OfMessageAttributes();
    Map<String, MessageAttributeValue> getMessageAttributes();
}

Usage Example:

// Basic message receive
ReceiveMessageRequest request = new ReceiveMessageRequest(queueUrl);
ReceiveMessageResult result = client.receiveMessage(request);

for (Message message : result.getMessages()) {
    System.out.println("Received: " + message.getBody());
    // Process message...
}

// Advanced receive with long polling and attributes
ReceiveMessageRequest advancedRequest = new ReceiveMessageRequest()
    .withQueueUrl(queueUrl)
    .withMaxNumberOfMessages(10)
    .withWaitTimeSeconds(20) // Long polling
    .withVisibilityTimeout(60) // 1 minute visibility
    .withAttributeNames(QueueAttributeName.All)
    .withMessageAttributeNames("All");

ReceiveMessageResult advancedResult = client.receiveMessage(advancedRequest);

for (Message message : advancedResult.getMessages()) {
    System.out.println("Message ID: " + message.getMessageId());
    System.out.println("Body: " + message.getBody());
    System.out.println("Receipt Handle: " + message.getReceiptHandle());
    
    // Access message attributes
    for (Map.Entry<String, MessageAttributeValue> attr : message.getMessageAttributes().entrySet()) {
        System.out.println("Attribute " + attr.getKey() + ": " + attr.getValue().getStringValue());
    }
    
    // Access system attributes
    for (Map.Entry<String, String> attr : message.getAttributes().entrySet()) {
        System.out.println("System attribute " + attr.getKey() + ": " + attr.getValue());
    }
}

Delete Messages

Delete Single Message

Remove processed messages from the queue using receipt handles.

DeleteMessageResult deleteMessage(DeleteMessageRequest request);

// Convenience method
DeleteMessageResult deleteMessage(String queueUrl, String receiptHandle);

class DeleteMessageRequest extends AmazonWebServiceRequest {
    DeleteMessageRequest();
    DeleteMessageRequest(String queueUrl, String receiptHandle);
    
    String getQueueUrl();
    DeleteMessageRequest withQueueUrl(String queueUrl);
    
    String getReceiptHandle();
    DeleteMessageRequest withReceiptHandle(String receiptHandle);
}

class DeleteMessageResult {
    // Empty result class - success indicated by no exception
}

Usage Example:

// Receive and delete pattern
ReceiveMessageResult receiveResult = client.receiveMessage(new ReceiveMessageRequest(queueUrl));

for (Message message : receiveResult.getMessages()) {
    try {
        // Process the message
        processMessage(message);
        
        // Delete after successful processing
        client.deleteMessage(new DeleteMessageRequest()
            .withQueueUrl(queueUrl)
            .withReceiptHandle(message.getReceiptHandle()));
        
        System.out.println("Deleted message: " + message.getMessageId());
    } catch (Exception e) {
        System.err.println("Failed to process message: " + e.getMessage());
        // Don't delete - message will become visible again
    }
}

Delete Batch Messages

Delete up to 10 messages in a single API call.

DeleteMessageBatchResult deleteMessageBatch(DeleteMessageBatchRequest request);

// Convenience method
DeleteMessageBatchResult deleteMessageBatch(String queueUrl, List<DeleteMessageBatchRequestEntry> entries);

class DeleteMessageBatchRequest extends AmazonWebServiceRequest {
    String getQueueUrl();
    DeleteMessageBatchRequest withQueueUrl(String queueUrl);
    
    List<DeleteMessageBatchRequestEntry> getEntries();
    DeleteMessageBatchRequest withEntries(List<DeleteMessageBatchRequestEntry> entries);
    DeleteMessageBatchRequest withEntries(DeleteMessageBatchRequestEntry... entries);
}

class DeleteMessageBatchRequestEntry {
    String getId();
    DeleteMessageBatchRequestEntry withId(String id);
    
    String getReceiptHandle();
    DeleteMessageBatchRequestEntry withReceiptHandle(String receiptHandle);
}

class DeleteMessageBatchResult {
    List<DeleteMessageBatchResultEntry> getSuccessful();
    List<BatchResultErrorEntry> getFailed();
}

class DeleteMessageBatchResultEntry {
    String getId();
}

Usage Example:

// Batch delete after processing
List<DeleteMessageBatchRequestEntry> deleteEntries = new ArrayList<>();
ReceiveMessageResult receiveResult = client.receiveMessage(new ReceiveMessageRequest(queueUrl));

for (Message message : receiveResult.getMessages()) {
    try {
        // Process message
        processMessage(message);
        
        // Add to batch delete list
        deleteEntries.add(new DeleteMessageBatchRequestEntry()
            .withId(message.getMessageId())
            .withReceiptHandle(message.getReceiptHandle()));
            
    } catch (Exception e) {
        System.err.println("Skipping delete for failed message: " + message.getMessageId());
    }
}

// Perform batch delete
if (!deleteEntries.isEmpty()) {
    DeleteMessageBatchRequest deleteRequest = new DeleteMessageBatchRequest()
        .withQueueUrl(queueUrl)
        .withEntries(deleteEntries);
    
    DeleteMessageBatchResult deleteResult = client.deleteMessageBatch(deleteRequest);
    
    System.out.println("Successfully deleted: " + deleteResult.getSuccessful().size() + " messages");
    
    for (BatchResultErrorEntry error : deleteResult.getFailed()) {
        System.err.println("Failed to delete: " + error.getId() + " - " + error.getMessage());
    }
}

Message Attributes

Working with Message Attributes

Add custom metadata to messages for routing, processing, and filtering.

class MessageAttributeValue {
    String getStringValue();
    MessageAttributeValue withStringValue(String stringValue);
    
    java.nio.ByteBuffer getBinaryValue();
    MessageAttributeValue withBinaryValue(java.nio.ByteBuffer binaryValue);
    
    List<String> getStringListValues();
    MessageAttributeValue withStringListValues(List<String> stringListValues);
    
    List<java.nio.ByteBuffer> getBinaryListValues();
    MessageAttributeValue withBinaryListValues(List<java.nio.ByteBuffer> binaryListValues);
    
    String getDataType();
    MessageAttributeValue withDataType(String dataType);
}

Usage Example:

// Create various attribute types
Map<String, MessageAttributeValue> attributes = new HashMap<>();

// String attribute
attributes.put("MessageType", new MessageAttributeValue()
    .withDataType("String")
    .withStringValue("Order"));

// Number attribute
attributes.put("Priority", new MessageAttributeValue()
    .withDataType("Number")
    .withStringValue("5"));

// Binary attribute
attributes.put("Thumbnail", new MessageAttributeValue()
    .withDataType("Binary")
    .withBinaryValue(ByteBuffer.wrap(imageBytes)));

// String list attribute
attributes.put("Tags", new MessageAttributeValue()
    .withDataType("String.Array")
    .withStringListValues(Arrays.asList("urgent", "customer-order")));

// Send message with attributes
SendMessageRequest request = new SendMessageRequest()
    .withQueueUrl(queueUrl)
    .withMessageBody("Order data")
    .withMessageAttributes(attributes);

client.sendMessage(request);

Error Handling

Common exceptions and error handling patterns for message operations:

try {
    SendMessageResult result = client.sendMessage(request);
} catch (InvalidMessageContentsException e) {
    // Message body contains invalid characters
    System.err.println("Invalid message content: " + e.getMessage());
} catch (QueueDoesNotExistException e) {
    // Queue URL is invalid or queue was deleted
    System.err.println("Queue not found: " + e.getMessage());
} catch (UnsupportedOperationException e) {
    // Operation not supported (e.g., invalid queue type)
    System.err.println("Unsupported operation: " + e.getMessage());
}

// Batch operation error handling
try {
    SendMessageBatchResult result = client.sendMessageBatch(batchRequest);
    
    // Check for partial failures
    if (!result.getFailed().isEmpty()) {
        for (BatchResultErrorEntry error : result.getFailed()) {
            System.err.println("Batch entry " + error.getId() + " failed: " + 
                error.getCode() + " - " + error.getMessage());
        }
    }
} catch (EmptyBatchRequestException e) {
    System.err.println("Batch request was empty");
} catch (TooManyEntriesInBatchRequestException e) {
    System.err.println("Too many entries in batch (max 10)");
} catch (BatchEntryIdsNotDistinctException e) {
    System.err.println("Batch entry IDs must be unique");
}

Install with Tessl CLI

npx tessl i tessl/maven-com-amazonaws--aws-java-sdk-sqs

docs

async-operations.md

buffered-client.md

client-management.md

dead-letter-queues.md

index.md

message-operations.md

message-visibility.md

queue-operations.md

queue-permissions.md

queue-tagging.md

tile.json