Class: AWS::SQS::ReceivedMessage
- Inherits:
-
Object
- Object
- AWS::SQS::ReceivedMessage
- Includes:
- Core::Model
- Defined in:
- lib/aws/sqs/received_message.rb
Overview
Represents a message received from an Amazon SQS Queue.
Constant Summary collapse
- ATTRIBUTE_ALIASES =
{ :sent_at => :sent_timestamp, :receive_count => :approximate_receive_count, :first_received_at => :approximate_first_receive_timestamp }
Instance Attribute Summary collapse
- #attributes ⇒ Object readonly
-
#body ⇒ String
readonly
The message’s contents.
-
#handle ⇒ String
readonly
A string associated with this specific instance of receiving the message.
-
#id ⇒ String
readonly
The ID of the message.
-
#md5 ⇒ String
readonly
An MD5 digest of the message body.
-
#queue ⇒ Queue
readonly
The queue from which this message was received.
Attributes included from Core::Model
Instance Method Summary collapse
-
#approximate_first_receive_timestamp ⇒ Time
(also: #first_received_at)
The time when the message was first received.
-
#approximate_receive_count ⇒ Integer
(also: #receive_count)
The number of times a message has been received but not deleted.
-
#as_sns_message ⇒ ReceivedSNSMessage
When SNS publishes messages to SQS queues the message body is formatted as a json message and then base 64 encoded.
-
#delete ⇒ nil
Deletes the message from the queue.
-
#initialize(queue, id, handle, opts = {}) ⇒ ReceivedMessage
constructor
A new instance of ReceivedMessage.
-
#sender_id ⇒ String
The AWS account number (or the IP address, if anonymous access is allowed) of the sender.
-
#sent_timestamp ⇒ Time
(also: #sent_at)
The time when the message was sent.
-
#visibility_timeout=(timeout) ⇒ Object
Changes the visibility timeout of a specified message in a queue to a new value.
Methods included from Core::Model
#client, #config_prefix, #inspect
Constructor Details
#initialize(queue, id, handle, opts = {}) ⇒ ReceivedMessage
Returns a new instance of ReceivedMessage.
50 51 52 53 54 55 56 57 58 |
# File 'lib/aws/sqs/received_message.rb', line 50 def initialize(queue, id, handle, opts = {}) @queue = queue @id = id @handle = handle @body = opts[:body] @md5 = opts[:md5] @attributes = opts[:attributes] || {} super end |
Instance Attribute Details
#attributes ⇒ Object (readonly)
40 41 42 |
# File 'lib/aws/sqs/received_message.rb', line 40 def attributes @attributes end |
#body ⇒ String (readonly)
Returns The message’s contents.
34 35 36 |
# File 'lib/aws/sqs/received_message.rb', line 34 def body @body end |
#handle ⇒ String (readonly)
Returns A string associated with this specific instance of receiving the message.
31 32 33 |
# File 'lib/aws/sqs/received_message.rb', line 31 def handle @handle end |
#id ⇒ String (readonly)
Returns The ID of the message.
27 28 29 |
# File 'lib/aws/sqs/received_message.rb', line 27 def id @id end |
#md5 ⇒ String (readonly)
Returns An MD5 digest of the message body.
37 38 39 |
# File 'lib/aws/sqs/received_message.rb', line 37 def md5 @md5 end |
#queue ⇒ Queue (readonly)
Returns The queue from which this message was received.
24 25 26 |
# File 'lib/aws/sqs/received_message.rb', line 24 def queue @queue end |
Instance Method Details
#approximate_first_receive_timestamp ⇒ Time Also known as: first_received_at
Returns The time when the message was first received.
171 172 173 174 175 |
# File 'lib/aws/sqs/received_message.rb', line 171 def @received_at ||= ( = attributes["ApproximateFirstReceiveTimestamp"] and Time.at(.to_i / 1000.0)) || nil end |
#approximate_receive_count ⇒ Integer Also known as: receive_count
Returns The number of times a message has been received but not deleted.
164 165 166 167 |
# File 'lib/aws/sqs/received_message.rb', line 164 def approximate_receive_count (count = attributes["ApproximateReceiveCount"] and count.to_i) or nil end |
#as_sns_message ⇒ ReceivedSNSMessage
When SNS publishes messages to SQS queues the message body is formatted as a json message and then base 64 encoded. An easy way to work with SNS messages is to call this method:
sns_msg = .
sns_msg.topic
#=> <AWS::SNS::Topic ...>
sns_msg.to_h.inspect
#=> { :body => '...', :topic_arn => ... }
73 74 75 |
# File 'lib/aws/sqs/received_message.rb', line 73 def ReceivedSNSMessage.new(body, :config => config) end |
#delete ⇒ nil
It is possible you will receive a message even after you have deleted it. This might happen on rare occasions if one of the servers storing a copy of the message is unavailable when you request to delete the message. The copy remains on the server and might be returned to you again on a subsequent receive request. You should create your system to be idempotent so that receiving a particular message more than once is not a problem.
Deletes the message from the queue. Even if the message is locked by another reader due to the visibility timeout setting, it is still deleted from the queue. If you leave a message in the queue for more than 4 days, SQS automatically deletes it.
If you use Queue#poll or Queue#receive_message in block form, the messages you receive will be deleted automatically unless an exception occurs while you are processing them. You can still use this method if you want to delete a message early and then continue processing it.
99 100 101 102 103 104 |
# File 'lib/aws/sqs/received_message.rb', line 99 def delete client.( :queue_url => queue.url, :receipt_handle => handle) nil end |
#sender_id ⇒ String
Returns The AWS account number (or the IP address, if anonymous access is allowed) of the sender.
148 149 150 |
# File 'lib/aws/sqs/received_message.rb', line 148 def sender_id attributes["SenderId"] end |
#sent_timestamp ⇒ Time Also known as: sent_at
Returns The time when the message was sent.
153 154 155 156 157 158 159 |
# File 'lib/aws/sqs/received_message.rb', line 153 def @sent_at ||= ( = attributes["SentTimestamp"] and Time.at(.to_i / 1000.0)) || nil rescue RangeError => e p [, .to_i] end |
#visibility_timeout=(timeout) ⇒ Object
If you attempt to set the timeout to an amount more than the maximum time left, Amazon SQS returns an error. It will not automatically recalculate and increase the timeout to the maximum time remaining.
Unlike with a queue, when you change the visibility timeout for a specific message, that timeout value is applied immediately but is not saved in memory for that message. If you don’t delete a message after it is received, the visibility timeout for the message the next time it is received reverts to the original timeout value, not the value you set with this method.
Changes the visibility timeout of a specified message in a queue to a new value. The maximum allowed timeout value you can set the value to is 12 hours. This means you can’t extend the timeout of a message in an existing queue to more than a total visibility timeout of 12 hours. (For more information visibility timeout, see Visibility Timeout in the Amazon SQS Developer Guide.)
For example, let’s say the timeout for the queue is 30 seconds, and you receive a message. Once you’re 20 seconds into the timeout for that message (i.e., you have 10 seconds left), you extend it by 60 seconds by calling this method with timeout
set to 60 seconds. You have then changed the remaining visibility timeout from 10 seconds to 60 seconds.
137 138 139 140 141 142 143 144 |
# File 'lib/aws/sqs/received_message.rb', line 137 def visibility_timeout=(timeout) client.( :queue_url => queue.url, :receipt_handle => handle, :visibility_timeout => timeout ) timeout end |