I've made some progress, but have run into another snag: I've added a
WorkitemListener to the engine, and it is consuming messages from the
ruote_workitems queue. However, it seems like it is not passing them
correctly back into Ruote.
Latest version of my test script (also pastied at
http://pastie.org/942518):
----------
#!/usr/bin/env ruby
require 'rubygems'
require 'ruote-amqp'
require 'ruote-amqp/participant'
require 'ruote'
require 'ruote/storage/fs_storage'
AMQP.settings[:logging] = false
puts AMQP.settings.inspect
engine = Ruote::Engine.new(
Ruote::Worker.new(
Ruote::FsStorage.new('ruote_work')
)
)
listener = RuoteAMQP::WorkitemListener.new(engine)
pdef = Ruote.process_definition :name => 'print_quote' do
sequence do
amqp :queue => 'work1', :command => '/sample/quote'
end
end
engine.register_participant(:amqp, RuoteAMQP::Participant)
fei = engine.launch(pdef)
engine.wait_for(fei)
----------
Script output (also pastied at
http://pastie.org/942522)
----------
$ ruby ruote-amqp_test.rb
{:timeout=>nil, :pass=>"guest", :user=>"guest", :vhost=>"/", :ssl=>false, :host=>"127.0.0.1", :logging=>false, :port=>5672}
/Library/Ruby/Gems/1.8/gems/ruote-2.1.10/lib/ruote/receiver/base.rb:
47:in `reply': undefined method `storage' for nil:NilClass
(NoMethodError)
from /Library/Ruby/Gems/1.8/gems/ruote-amqp-2.1.5/lib/ruote-amqp/
workitem_listener.rb:67:in `initialize'
from /Library/Ruby/Gems/1.8/gems/amqp-0.6.7/lib/mq/queue.rb:391:in
`call'
from /Library/Ruby/Gems/1.8/gems/amqp-0.6.7/lib/mq/queue.rb:391:in
`receive'
from /Library/Ruby/Gems/1.8/gems/amqp-0.6.7/lib/mq.rb:171:in
`process_frame'
from /Library/Ruby/Gems/1.8/gems/amqp-0.6.7/lib/amqp/client.rb:9:in
`process_frame'
from /Library/Ruby/Gems/1.8/gems/amqp-0.6.7/lib/amqp/client.rb:117:in
`receive_data'
from /Library/Ruby/Gems/1.8/gems/eventmachine-0.12.10/lib/
eventmachine.rb:256:in `run_machine'
from /Library/Ruby/Gems/1.8/gems/eventmachine-0.12.10/lib/
eventmachine.rb:256:in `run'
from /Library/Ruby/Gems/1.8/gems/amqp-0.6.7/lib/amqp.rb:79:in `start'
from /Library/Ruby/Gems/1.8/gems/ruote-amqp-2.1.5/lib/ruote-amqp.rb:
43:in `start!'
from /Library/Ruby/Gems/1.8/gems/ruote-amqp-2.1.5/lib/ruote-amqp.rb:
41:in `initialize'
from /Library/Ruby/Gems/1.8/gems/ruote-amqp-2.1.5/lib/ruote-amqp.rb:
41:in `new'
from /Library/Ruby/Gems/1.8/gems/ruote-amqp-2.1.5/lib/ruote-amqp.rb:
41:in `start!'
from /Library/Ruby/Gems/1.8/gems/ruote-amqp-2.1.5/lib/ruote-amqp/
workitem_listener.rb:60:in `initialize'
from ruote-amqp_test.rb:26:in `new'
from ruote-amqp_test.rb:26
daemon-kit agent output:
$ bin/ruote
[daemon-kit]: DaemonKit (0.1.8pre) booting in development mode
[daemon-kit]: Setting up trap for USR1
[daemon-kit]: Setting up trap for USR2
[daemon-kit]: Setting up trap for HUP
[daemon-kit]: Setting up trap for INT
[daemon-kit]: Setting up trap for TERM
[daemon-kit]: DaemonKit (0.1.8pre) booted, now running ruote
[daemon-kit]:
AMQP.start({:pass=>"guest", :host=>"localhost", :user=>"guest", :vhost=>"/"})
[daemon-kit]: Subscribing to work1 for workitems
[daemon-kit]: Received workitem: "{\"participant_name\":\"amqp\",
\"fields\":{\"dispatched_at\":\"2010-05-02 16:22:35.893107 UTC\",
\"params\":{\"command\":\"/sample/quote\",\"reply_queue\":
\"ruote_workitems\",\"queue\":\"work1\",\"ref\":\"amqp\"}},\"fei\":
{\"sub_wfid\":null,\"wfid\":\"20100502-bigapetami\",\"engine_id\":
\"engine\",\"expid\":\"0_0_0\"}}"
[daemon-kit]: Replying to engine via AMQP with
#<DaemonKit::RuoteWorkitem:0x1015047c0
@workitem={"participant_name"=>"amqp", "fields"=>{"success"=>true,
"dispatched_at"=>"2010-05-02 16:22:35.893107 UTC", "quote"=>"Garbage
In -- Gospel Out.\n\n[fortune]
http://iheartquotes.com/fortune/show/44430\n",
"params"=>{"command"=>"/sample/quote", "ref"=>"amqp",
"queue"=>"work1", "reply_queue"=>"ruote_workitems"}},
"fei"=>{"sub_wfid"=>nil, "wfid"=>"20100502-bigapetami",
"engine_id"=>"engine", "expid"=>"0_0_0"}}>
[daemon-kit]: Processed workitem.
----------
Versions:
----------
ruote (2.1.10)
ruote-amqp (2.1.5)
ruote-kit (2.1.7)
ruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0]
----------