AWS services or capabilities described in AWS Documentation may vary by region/location. Click Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Setting Visibility Timeout in Amazon SQS

When a message is received in Amazon SQS, it remains on the queue until it's deleted in order to ensure receipt. A message that was received, but not deleted, will be available in subsequent requests after a given visibility timeout to help prevent the message from being received more than once before it can be processed and deleted.


When using standard queues, visibility timeout isn't a guarantee against receiving a message twice. If you are using a standard queue, be sure that your code can handle the case where the same message has been delivered more than once.

Setting the Message Visibility Timeout upon Message Receipt#

When you have received a message, you can modify its visibility timeout by passing its receipt handle in a ChangeMessageVisibilityRequest that you pass to the SQSClient class' ChangeMessageVisibility member function.


#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/ChangeMessageVisibilityRequest.h>
#include <aws/sqs/model/ReceiveMessageRequest.h>


Aws::Client::ClientConfiguration client_config;
client_config.requestTimeoutMs = 30000;

Aws::SQS::SQSClient sqs(client_config);

Aws::SQS::Model::ReceiveMessageRequest receive_request;

auto receive_outcome = sqs.ReceiveMessage(receive_request);
if (!receive_outcome.IsSuccess()) {
    std::cout << "Error receiving message from queue " << queue_url << ": "
        << receive_outcome.GetError().GetMessage() << std::endl;

const auto& messages = receive_outcome.GetResult().GetMessages();
if (messages.size() == 0) {
    std::cout << "No messages received from queue " << queue_url <<

const auto& message = messages[0];
std::cout << "Received message:" << std::endl;
std::cout << "  MessageId: " << message.GetMessageId() << std::endl;
std::cout << "  ReceiptHandle: " << message.GetReceiptHandle() << std::endl;
std::cout << "  Body: " << message.GetBody() << std::endl << std::endl;

Aws::SQS::Model::ChangeMessageVisibilityRequest request;
auto outcome = sqs.ChangeMessageVisibility(request);
if (outcome.IsSuccess()) {
    std::cout << "Successfully changed visibility of message " <<
        message.GetMessageId() << " from queue " << queue_url << std::endl;
} else {
    std::cout << "Error changing visibility of message " <<
        message.GetMessageId() << " from queue " << queue_url << ": " <<
        outcome.GetError().GetMessage() << std::endl;

See the complete example.

More Info#