Class: RightAws::Sqs::Queue

Inherits:
Object show all
Defined in:
lib/sqs/right_sqs.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sqs, url_or_name) ⇒ Queue

Creates new Queue instance. Does not create a queue at Amazon.

queue = RightAws::Sqs::Queue.new(sqs, 'my_awesome_queue')


113
114
115
116
117
# File 'lib/sqs/right_sqs.rb', line 113

def initialize(sqs, url_or_name)
  @sqs  = sqs
  @url  = @sqs.interface.queue_url_by_name(url_or_name)
  @name = @sqs.interface.queue_name_by_url(@url)
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



97
98
99
# File 'lib/sqs/right_sqs.rb', line 97

def name
  @name
end

#sqsObject (readonly)

Returns the value of attribute sqs.



97
98
99
# File 'lib/sqs/right_sqs.rb', line 97

def sqs
  @sqs
end

#urlObject (readonly)

Returns the value of attribute url.



97
98
99
# File 'lib/sqs/right_sqs.rb', line 97

def url
  @url
end

Class Method Details

.create(sqs, url_or_name, create = true, visibility = nil) ⇒ Object

Returns Queue instance by queue name. If the queue does not exist at Amazon SQS and create is true, the method creates it.

RightAws::Sqs::Queue.create(sqs, 'my_awesome_queue') #=> #<RightAws::Sqs::Queue:0xb7b626e4 ... >


104
105
106
# File 'lib/sqs/right_sqs.rb', line 104

def self.create(sqs, url_or_name, create=true, visibility=nil)
  sqs.queue(url_or_name, create, visibility)
end

Instance Method Details

#clearObject

Clears queue, deleting only the visible messages. Any message within its visibility timeout will not be deleted, and will re-appear in the queue in the future when the timeout expires.

To delete all messages in a queue and eliminate the chance of any messages re-appearing in the future, it’s best to delete the queue and re-create it as a new queue. Note that doing this will take at least 60 s since SQS does not allow re-creation of a queue within this interval.

queue.clear() #=> true


138
139
140
# File 'lib/sqs/right_sqs.rb', line 138

def clear()
    @sqs.interface.clear_queue(@url)
end

#delete(force = false) ⇒ Object

Deletes queue. Any messages in the queue will be permanently lost. Returns true.

NB: Use with caution; severe data loss is possible!

queue.delete(true) #=> true



149
150
151
# File 'lib/sqs/right_sqs.rb', line 149

def delete(force=false)
  @sqs.interface.delete_queue(@url)
end

#get_attribute(attribute = 'All') ⇒ Object

Retrieves queue attributes. At this moment Amazon supports VisibilityTimeout and ApproximateNumberOfMessages only. If the name of attribute is set, returns its value. Otherwise, returns a hash of attributes.

queue.get_attribute(‘VisibilityTimeout’) #=> “VisibilityTimeout”=>“45”



249
250
251
252
# File 'lib/sqs/right_sqs.rb', line 249

def get_attribute(attribute='All')
  attributes = @sqs.interface.get_queue_attributes(@url, attribute)
  attribute=='All' ? attributes : attributes[attribute]
end

#popObject

Pops (and deletes) first accessible message from queue. Returns Message instance or nil if the queue is empty.

queue.pop #=> #<RightAws::Sqs::Message:0xb7bf0884 ... >


196
197
198
199
200
201
202
203
204
205
# File 'lib/sqs/right_sqs.rb', line 196

def pop
  list = @sqs.interface.pop_messages(@url, 1)
  return nil if list.empty?
  entry = list[0]
  msg = Message.new(self, entry['MessageId'], entry['ReceiptHandle'],
                      entry['Body'], visibility)
  msg.received_at = Time.now
  msg.receive_checksum = entry['MD5OfBody']
  msg
end

#receive(visibility = nil) ⇒ Object

Retrieves first accessible message from queue. Returns Message instance or nil it the queue is empty.

queue.receive #=> #<RightAws::Sqs::Message:0xb7bf0884 ... >


186
187
188
189
# File 'lib/sqs/right_sqs.rb', line 186

def receive(visibility=nil)
  list = receive_messages(1, visibility)
  list.empty? ? nil : list[0]
end

#receive_messages(number_of_messages = 1, visibility = nil) ⇒ Object

Retrieves several messages from queue. Returns an array of Message instances.

queue.receive_messages(2,10) #=> array of messages


170
171
172
173
174
175
176
177
178
179
# File 'lib/sqs/right_sqs.rb', line 170

def receive_messages(number_of_messages=1, visibility=nil)
  list = @sqs.interface.receive_message(@url, number_of_messages, visibility)
  list.map! do |entry|
    msg = Message.new(self, entry['MessageId'], entry['ReceiptHandle'],
                      entry['Body'], visibility)
    msg.received_at = Time.now
    msg.receive_checksum = entry['MD5OfBody']
    msg
  end
end

#send_message(message) ⇒ Object Also known as: push

Sends new message to queue. Returns new Message instance that has been sent to queue.



155
156
157
158
159
160
161
162
# File 'lib/sqs/right_sqs.rb', line 155

def send_message(message)
  message = message.to_s
  res = @sqs.interface.send_message(@url, message)
  msg = Message.new(self, res['MessageId'], nil, message)
  msg.send_checksum = res['MD5OfMessageBody']
  msg.sent_at = Time.now
  msg
end

#set_attribute(attribute, value) ⇒ Object

Sets new queue attribute value. Not all attributes may be changed: ApproximateNumberOfMessages (for example) is a read only attribute. Returns a value to be assigned to attribute. Currently, ‘VisibilityTimeout’ is the only settable queue attribute. Attempting to set non-existent attributes generates an indignant exception.

queue.set_attribute(‘VisibilityTimeout’, ‘100’) #=> ‘100’ queue.get_attribute(‘VisibilityTimeout’) #=> ‘100’



238
239
240
241
# File 'lib/sqs/right_sqs.rb', line 238

def set_attribute(attribute, value)
  @sqs.interface.set_queue_attributes(@url, attribute, value)
  value
end

#sizeObject

Retrieves queue size.

queue.size #=> 1


123
124
125
# File 'lib/sqs/right_sqs.rb', line 123

def size
  @sqs.interface.get_queue_length(@url)
end

#visibilityObject

Retrieves VisibilityTimeout value for the queue. Returns new timeout value.

queue.visibility #=> 30


212
213
214
# File 'lib/sqs/right_sqs.rb', line 212

def visibility
  @sqs.interface.get_queue_attributes(@url, 'VisibilityTimeout')['VisibilityTimeout']
end

#visibility=(visibility_timeout) ⇒ Object

Sets new VisibilityTimeout for the queue. Returns new timeout value.

queue.visibility #=> 30
queue.visibility = 33
queue.visibility #=> 33


223
224
225
226
# File 'lib/sqs/right_sqs.rb', line 223

def visibility=(visibility_timeout)
  @sqs.interface.set_queue_attributes(@url, 'VisibilityTimeout', visibility_timeout)
  visibility_timeout
end