Commit ee3341f

mo khan <mo@mokhan.ca>
2014-10-10 16:33:51
use prefetch to only deliver one message at a time to each worker.
1 parent 1baeb52
Changed files (2)
lib/example2/receive.rb
@@ -9,10 +9,16 @@ connection.start
 channel = connection.create_channel
 queue = channel.queue("task_queue", durable: true)
 
+channel.prefetch(1)
 puts " [*] Waiting for messages in #{queue.name}. To exit press CTRL+C"
-queue.subscribe(manual_ack: true, block: true) do |delivery_info, properties, body|
-  puts " [x] Received #{body}"
-  sleep body.count(".").to_i
-  puts " [x] Done"
-  channel.ack(delivery_info.delivery_tag)
+
+begin
+  queue.subscribe(manual_ack: true, block: true) do |delivery_info, properties, body|
+    puts " [x] Received #{body}"
+    sleep body.count(".").to_i
+    puts " [x] Done"
+    channel.ack(delivery_info.delivery_tag)
+  end
+rescue Interrupt => _
+  connection.close
 end
lib/example2/send.rb
@@ -12,4 +12,5 @@ queue = channel.queue("task_queue", durable: true)
 message  = ARGV.empty? ? "Hello World!" : ARGV.join(" ")
 queue.publish(message, persistent: true)
 puts " [x] Sent #{message}"
+sleep 1.0
 connection.close