Hi guys, I wanted to discuss the new Queueing API for those of us who are implementing an out-of-process version. In my case, I write Sidekiq [1] and would like to support the new API once Rails 4 is released. My issue is that because the API is object-oriented rather than message-oriented, implementation of out-of-process workers is difficult.
The API is Queue#push(job) where job has a run method. Ruby doesn't have a great solution for serializing a Ruby object across the wire. Marshal limits the API to Ruby solutions (which rules out RabbitMQ, et al), JSON can't fully serialize Ruby objects (e.g. symbols) and YAML has a number of issues in practice that make it painful to use (e.g. see the monkeypatches DelayedJob has to use [2]).
So I love the simplicity of the API but think it will lead to painful implementation issues. What do you think about defining a simpler message format that can be fully serialized and deserialized via JSON / YAML / etc instead of using a Ruby object?
mike
[1] http://mperham.github.com/sidekiq/ [2] delayed_job/psych_ext.rb at master · collectiveidea/delayed_job · GitHub