Embedding Queueue
As of version 0.0.3, Queueue can be embedded in Ruby code through its QueueService interface. In this mode, Queueue could be used as a simple alternative for instrumenting message driven Ruby code.
require "rubygems"
require "queueue"
QUEUE_NAME = "queue"
SERVICE = Queueue::QueueService.new
SERVICE.create_queue QUEUE_NAME
SERVICE.set_visibility_timeout QUEUE_NAME, 5
listener = Thread.new do
loop do
messages = SERVICE.receive_message QUEUE_NAME
messages.each do |msg|
p msg.body
SERVICE.delete_message QUEUE_NAME, msg.message_id
end
end
end
talker = Thread.new do
%w(We've been dancing with Mr Brownstone).each do |msg|
SERVICE.send_message QUEUE_NAME, msg
sleep 2
end
p "Done. Exiting running threads"
Thread.list.each { |t| t.exit! }
end
talker.join
listener.join
Another interesting scenario can involve QueueService combined with DRb as a means to instrumenting distributed Ruby processes.
An instance of QueueService wrapped inside a DRb server:
require "drb" require "rubygems" require "queueue" DRb.start_service "druby://0.0.0.0:7777", Queueue::QueueService.new DRb.thread.join
And DRb clients posting and consuming messages:
require "drb" require "rubygems" require "queueue" service = DRbObject.new nil, 'druby://0.0.0.0:7777' service.create_queue 'q' service.send_message 'q', "We've been dancing with Mr Brownstone" messages = service.receive_message 'q' messages.first.body # => "We've been dancing with Mr Brownstone"
