class Tackle::Consumer::DelayQueue

Public Class Methods

new(retry_delay, exchange, connection, logger) click to toggle source
Calls superclass method Tackle::Consumer::Queue::new
# File lib/tackle/consumer/delay_queue.rb, line 5
def initialize(retry_delay, exchange, connection, logger)
  @retry_delay = retry_delay

  name = "#{exchange.name}.delay.#{retry_delay}"

  options = {
    :durable => true,
    :arguments => {
      "x-dead-letter-exchange" => exchange.name,
      "x-dead-letter-routing-key" => exchange.routing_key,
      "x-message-ttl" => retry_delay * 1000 # miliseconds
    }
  }

  super(name, options, connection, logger)
end

Public Instance Methods

publish(message) click to toggle source
# File lib/tackle/consumer/delay_queue.rb, line 22
def publish(message)
  message.log_error "Pushing message to delay queue delay='#{@retry_delay}'"

  headers = {
    :headers => {
      :retry_count => message.retry_count + 1
    }
  }

  @amqp_queue.publish(message.payload, headers)

  message.log_error "Message pushed to delay queue"
rescue StandardError => ex
  message.log_error "Error while pushing message to delay queue exception='#{ex}'"

  raise ex
end