Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement