Class: RightAws::Sqs::Queue

Inherits:
Object
  • 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')


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

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



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

def name
  @name
end

#sqsObject (readonly)

Returns the value of attribute sqs



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

def sqs
  @sqs
end

#urlObject (readonly)

Returns the value of attribute url



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

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 ... >


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

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

Instance Method Details

#clear(force = false) ⇒ Object

Clears queue. Deletes only the visible messages unless force is true.

queue.clear(true) #=> true

P.S. when force==true the queue deletes then creates again. This is the quickest method to clear a big queue or a queue with 'locked' messages. All queue attributes are restored. But there is no way to restore grantees' permissions to this queue. If you have no grantees except 'root' then you have no problems. Otherwise, it's better to use queue.clear(false).

PS This function is no longer supported. Amazon has changed the SQS semantics to require at least 60 seconds between queue deletion and creation. Hence this method will fail with an exception.



140
141
142
143
144
145
146
# File 'lib/sqs/right_sqs.rb', line 140

def clear(force=false)
##        if force
##          @sqs.interface.force_clear_queue(@url)
##        else
    @sqs.interface.clear_queue(@url)
##        end
end

#delete(force = false) ⇒ Object

Deletes queue. Queue must be empty or force must be set to true. Returns true.

queue.delete(true) #=> true


154
155
156
# File 'lib/sqs/right_sqs.rb', line 154

def delete(force=false)
  @sqs.interface.delete_queue(@url, force)
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') #=> '100'



253
254
255
256
# File 'lib/sqs/right_sqs.rb', line 253

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

#grantees(grantee_email_address = nil, permission = nil) ⇒ Object

Retrieves a list of grantees. Returns an array of Grantee instances if the grantee_email_address is unset. Otherwise returns a Grantee instance that points to grantee_email_address or nil.

grantees = queue.grantees #=> [#<RightAws::Sqs::Grantee:0xb7bf0888 ... >, ...]
 ...
grantee  = queue.grantees('cool_guy@email.address') #=> nil | #<RightAws::Sqs::Grantee:0xb7bf0888 ... >


266
267
268
269
270
271
272
273
274
275
276
277
# File 'lib/sqs/right_sqs.rb', line 266

def grantees(grantee_email_address=nil, permission = nil)
  hash = @sqs.interface.list_grants(@url, grantee_email_address, permission)
  grantees = []
  hash.each do |key, value|
    grantees << Grantee.new(self, grantee_email_address, key, value[:name], value[:perms])
  end
  if grantee_email_address
    grantees.right_blank? ? nil : grantees.shift
  else
    grantees
  end
end

#peek(message_id) ⇒ Object

Peeks message body.

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


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

def peek(message_id)
  entry = @sqs.interface.peek_message(@url, message_id)
  msg   = Message.new(self, entry[:id], entry[:body])
  msg.received_at = Time.now 
  msg
end

#popObject

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

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


208
209
210
211
212
# File 'lib/sqs/right_sqs.rb', line 208

def pop
  msg = receive
  msg.delete if msg
  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 ... >


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

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


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

def receive_messages(number_of_messages=1, visibility=nil)
  list = @sqs.interface.receive_messages(@url, number_of_messages, visibility)
  list.map! do |entry|
    msg             = Message.new(self, entry[:id], entry[:body], visibility)
    msg.received_at = Time.now 
    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.



160
161
162
163
164
165
# File 'lib/sqs/right_sqs.rb', line 160

def send_message(message)
  message = message.to_s
  msg     = Message.new(self, @sqs.interface.send_message(@url, message), message)
  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.

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



242
243
244
245
# File 'lib/sqs/right_sqs.rb', line 242

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

#sizeObject

Retrieves queue size.

queue.size #=> 1


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

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

#visibilityObject

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

queue.visibility #=> 30


219
220
221
# File 'lib/sqs/right_sqs.rb', line 219

def visibility
  @sqs.interface.get_visibility_timeout(@url)
end

#visibility=(visibility_timeout) ⇒ Object

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

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


230
231
232
233
# File 'lib/sqs/right_sqs.rb', line 230

def visibility=(visibility_timeout)
  @sqs.interface.set_visibility_timeout(@url, visibility_timeout)
  visibility_timeout
end