module SimpleMessageQueue

Constants

VERSION

Attributes

configuration[RW]

Class Methods only available to SimpleMessageQueue

Public Class Methods

configure() { |configuration| ... } click to toggle source
# File lib/simple_message_queue.rb, line 12
def configure
  self.configuration ||= Configuration.new
  yield(configuration)

  if self.configuration.sns_notifications
    topics = ['send_message_failure']
    topics.each do |topic|
      SimpleMessageQueue::Notification::Topic.new(topic)
    end
  end

end

Public Instance Methods

count() click to toggle source
# File lib/simple_message_queue.rb, line 46
def count
  queue.approximate_number_of_messages
end
delete_queue() click to toggle source
# File lib/simple_message_queue.rb, line 50
 def delete_queue
  queue.delete
end
exists?() click to toggle source
# File lib/simple_message_queue.rb, line 54
def exists?
  # Although there is a queue.exists? method, that is only relevant if you already have the queue stored in a variable and then delete it
  # Trying to look it up by name will either return the queue object or throw an error, hence the rescue
  true if sqs.queues.named(queue_name)
rescue
  false
end
logger() click to toggle source
# File lib/simple_message_queue.rb, line 75
def logger
  if SimpleMessageQueue.configuration.logger
    @logger = SimpleMessageQueue.configuration.logger
  else
    @logger ||= Logger.new(STDOUT)
  end
end
process_message(message) click to toggle source
# File lib/simple_message_queue.rb, line 94
def process_message(message)
  raise SimpleMessageQueue::NotImplementedError.new(name)
end
queue() click to toggle source
# File lib/simple_message_queue.rb, line 42
def queue
  @queue ||= sqs.queues.create(queue_name)
end
queue_name() click to toggle source
# File lib/simple_message_queue.rb, line 33
def queue_name
  raise SimpleMessageQueue::EnvironmentError unless environment_defined?
  if @queue_name
    @queue_name + "_#{SimpleMessageQueue.configuration.environment}"
  else
    name.underscore.gsub('/', '_') + "_#{SimpleMessageQueue.configuration.environment}"
  end
end
receive() click to toggle source
# File lib/simple_message_queue.rb, line 83
def receive
  @count = 0
  queue.poll(:idle_timeout => SimpleMessageQueue.configuration.idle_timeout, :wait_time_seconds => SimpleMessageQueue.configuration.wait_time_seconds) do |message|
    logger.info "Message received for #{queue_name}" if SimpleMessageQueue.configuration.debug
    logger.info "Message body: #{message.body}" if SimpleMessageQueue.configuration.debug
    @count += 1
    process_message(message)
  end
  @count
end
send(message, options={}) click to toggle source
# File lib/simple_message_queue.rb, line 62
def send(message, options={})
  begin
    queue.send_message(message, options)
  rescue => error
    logger.error "There was an error when sending an item to #{queue_name} at #{DateTime.now}. Error: #{error.to_s}"

    if defined?(SimpleMessageQueue.configuration.sns_notifications) && SimpleMessageQueue.configuration.sns_notifications == true
      topic = SimpleMessageQueue::Notification::Topic.new('send_message_failure')
      topic.send("There was an error when sending an item to #{queue_name} at #{DateTime.now}. Error: #{error.to_s}", "SimpleMessageQueue: Send Message Failure")
    end
  end
end
sqs() click to toggle source
# File lib/simple_message_queue.rb, line 27
def sqs
  raise SimpleMessageQueue::ConfigurationError unless SimpleMessageQueue.configuration
  raise SimpleMessageQueue::EnvironmentError unless environment_defined?
  @@sqs ||= AWS::SQS.new(:access_key_id => SimpleMessageQueue.configuration.access_key_id, :secret_access_key => SimpleMessageQueue.configuration.secret_access_key)
end

Protected Instance Methods

environment_defined?() click to toggle source
# File lib/simple_message_queue.rb, line 100
def environment_defined?
  defined?(SimpleMessageQueue.configuration.environment)
end