Skip to content

Instantly share code, notes, and snippets.

@seaneshbaugh
Created March 8, 2015 04:50
Show Gist options
  • Select an option

  • Save seaneshbaugh/ca949d738746596615bf to your computer and use it in GitHub Desktop.

Select an option

Save seaneshbaugh/ca949d738746596615bf to your computer and use it in GitHub Desktop.
Bunny dead letter exchange test
require 'bunny'
number_of_messages = 10
queue_name = 'contact'
connection = Bunny.new
connection.start
channel = connection.create_channel
exchange = channel.fanout("#{queue_name}.exchange")
retry_exchange = channel.fanout("#{queue_name}.retry.exchange")
retry_queue = channel.queue("#{queue_name}_retry", arguments: { 'x-dead-letter-exchange' => exchange.name, 'x-message-ttl' => 2000 }).bind(retry_exchange)
queue = channel.queue(queue_name).bind(exchange)
successes = 0
queue.subscribe do |_delivery_info, _metadata, payload|
puts '*' * 100
puts Time.now
puts payload
if rand(2) == 1
puts "Failed! (#{successes} / #{number_of_messages})"
retry_exchange.publish(payload)
else
successes += 1
puts "Success! (#{successes} / #{number_of_messages})"
end
puts '*' * 100
puts
end
number_of_messages.times do |i|
puts "\nPublishing message #{i}."
exchange.publish("Message ##{i}", routing_key: queue.name)
end
loop do
puts "\n#{successes} / #{number_of_messages} messages processed."
break if successes == number_of_messages
sleep 1
end
retry_exchange.delete
puts "Disconnecting..."
connection.close
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment