I would agree. I would prefer a message-oriented API to a 
Ruby-object-oriented API.

A Ruby object can of course be serialized to a message and deserialized 
from a message. But the key point is that it's messages over the wire and 
in the database, rather than objects, and then we layer on top a convenient 
object-message mapper - quite like an object-relation mapper or an 
object-document mapper; also quite like we layer on top of the HTTP request 
a Hash or an ActionDispatch::Request and likewise on top of the HTTP 
response a 3-item Array or an ActionDispatch::Response.

The nature of applications with message queues is that they're more likely 
to need to interoperate with applications in other languages. Any 
serialized message should be interoperable across languages, so that rules 
out Marshal and YAML with embedded Ruby class names, but YAML without 
embedded Ruby class names would be fine, as would JSON, XML, MessagePack, 
ProtocolBuffers, etc. The Rails API should not dictate the serialization 
format, but should permit any set of formats chosen by the application, as 
well as opaque binary strings.

Note that this has been a problem with Rails session cookies as well - they 
are not interoperable across applications written in different languages, 
because they are serialized from Ruby objects into bytes via Marshal.

On Saturday, April 28, 2012 10:31:27 PM UTC-4, Mike Perham wrote:
>
> 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] 
> https://github.com/collectiveidea/delayed_job/blob/master/lib/delayed/psych_ext.rb
>  
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/rubyonrails-core/-/x7Mzz36FbQgJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to