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.
