Advertisement
Guest User

Untitled

a guest
Feb 14th, 2017
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. require 'bunny'
  2. require 'active_support/all'
  3.  
  4. class Rabbitmq
  5.  
  6. def self.publish(message, to, delay)
  7. channel = connection.create_channel
  8. queue = channel.queue(to, durable: true)
  9. channel.exchange_declare(DELAYED_EXCHANGE_NAME, 'x-delayed-message', durable: true, arguments: {'x-delayed-type' => 'direct'})
  10. queue.bind(DELAYED_EXCHANGE_NAME, routing_key: queue.name)
  11. puts "Message should be deliver at #{(Time.now+delay.seconds).strftime('%Y-%m-%d %H:%M:%S.%3N')}"
  12. channel.basic_publish(message, DELAYED_EXCHANGE_NAME, queue.name, persistent: true, headers: {'x-delay' => (delay*1000).to_i})
  13. puts "Or maybe message should be deliver at #{(Time.now+delay.seconds).strftime('%Y-%m-%d %H:%M:%S.%3N')}"
  14. channel.close if channel.open?
  15. end
  16.  
  17. def self.subscribe(to)
  18. channel = connection.create_channel
  19. queue = channel.queue(to, durable: true)
  20. queue.subscribe(:block => false, :manual_ack => false) do |delivery_info, properties, body|
  21. puts "Message delivered at #{Time.now.strftime('%Y-%m-%d %H:%M:%S.%3N')}"
  22. end
  23. end
  24.  
  25. private
  26.  
  27. DELAYED_EXCHANGE_NAME = 'delay-exchange'
  28.  
  29. def self.connection
  30. @conn ||= Bunny.new({host: 'localhost', port: 5672, username: 'guest', password: 'guest'})
  31. @conn.start
  32. end
  33. end
  34.  
  35. Rabbitmq.subscribe(:test)
  36. Rabbitmq.publish('test', :test, 10)
  37. sleep 12
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement