Skip to content

Instantly share code, notes, and snippets.

@Abdulrazak-Alkl
Last active February 14, 2017 06:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Abdulrazak-Alkl/f00833233330ca161a2f38bfe7fcbd98 to your computer and use it in GitHub Desktop.
Save Abdulrazak-Alkl/f00833233330ca161a2f38bfe7fcbd98 to your computer and use it in GitHub Desktop.
require 'bunny'
require 'active_support/all'
class Rabbitmq
def self.publish(message, to, delay)
channel = connection.create_channel
queue = channel.queue(to, durable: true)
channel.exchange_declare(DELAYED_EXCHANGE_NAME, 'x-delayed-message', durable: true, arguments: {'x-delayed-type' => 'direct'})
queue.bind(DELAYED_EXCHANGE_NAME, routing_key: queue.name)
puts "Message should be deliver at #{(Time.now+delay.seconds).strftime('%Y-%m-%d %H:%M:%S.%3N')}"
channel.basic_publish(message, DELAYED_EXCHANGE_NAME, queue.name, persistent: true, headers: {'x-delay' => (delay*1000).to_i})
puts "Or maybe message should be deliver at #{(Time.now+delay.seconds).strftime('%Y-%m-%d %H:%M:%S.%3N')}"
channel.close if channel.open?
end
def self.subscribe(to)
channel = connection.create_channel
queue = channel.queue(to, durable: true)
queue.subscribe(:block => false, :manual_ack => false) do |delivery_info, properties, body|
puts "Message delivered at #{Time.now.strftime('%Y-%m-%d %H:%M:%S.%3N')}"
end
end
private
DELAYED_EXCHANGE_NAME = 'delay-exchange'
def self.connection
@conn ||= Bunny.new({host: 'localhost', port: 5672, username: 'guest', password: 'guest'})
@conn.start
end
end
Rabbitmq.subscribe(:test)
Rabbitmq.publish('test', :test, 10)
sleep 12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment