[rabbitmq-discuss] rabbitmq-jsonrpc "shortcut" HTTP calls?

Ivan Delchev ivdelchev at gmail.com
Wed May 5 13:08:10 BST 2010


Hi Tony, any thoughts for the future about optimizing the HTTP
adapter? Some thoughs were listed previously in this thread but never
got any reply..

Cheers,
Ivan

On Sun, Mar 28, 2010 at 1:20 PM, Ivan Delchev <ivdelchev at gmail.com> wrote:
> Hi Tony,
>
> Nice to hear that! Anyway, I didn't have in mind changing the AMQP
> protocol, I can imagine that there are plenty of people that use it in
> its current form. In case of the HTTP impl I think the following
> simple steps could help and can be easily accomodated in the server
> impl:
>
> 1. Combine the "system.describe" calls to /rpc/rabbitmq and
> /rpc/{service_hash}. Return a different hash in the "name" parameter
> if the URL is already in use, otherwise return the same.  Thus the 2
> "system.describe" calls can become 1.
>
> 2. Bundle calls that do not depend on each other in one call - e.g by
> providing an array of method calls, that should be executed in the
> same order.
>
> If no anonymous declarations are used, this should be acceptable:
>
> {"version":"1.1","id":5,"methods" : [
>    {"method":"open","params":["2","5b3beb2605605b9ebf5055f3e9e29754",120,null]}
>    {"method":"call","params":["access.request",["/data",false,true,true,true,true]]},
>    {"method":"call","params":["exchange.declare",[1,"exchange1","fanout",false,false,true,false,false,{}]]},
>    {"method":"call","params":["queue.declare",[1,"queue1",false,false,true,true,false,{}]]},
>    {"method":"call","params":["queue.bind",[1,"queue1","exchange1","",false,{}]]}
>    ]}
>
> Another options is in case of anonymous declarations to nest the
> declarations and compute the internal results first and use them as
> arguments for the upper ones:
>
> {"version":"1.1","id":5,"methods" : [
>    {"method":"open","params":["2","5b3beb2605605b9ebf5055f3e9e29754",120,null]}
>    {"method":"call","params":["access.request",["/data",false,true,true,true,true]]},
>    {"method":"call","params":["queue.bind",[1,
>        {"method":"call","params":["queue.declare",[1,"",false,false,true,true,false,{}]]},
>        {"method":"call","params":["exchange.declare",[1,"","fanout",false,false,true,false,false,{}]]},
>        "",false,{}]]}
>    ]}
>
> That should be possible and I think and will save quite some HTTP
> roundtrips. If you provide the server-side I can try to deliver the
> javascript client :)
>
> Cheers,
> Ivan
>
> On Thu, Mar 25, 2010 at 10:47 PM, Tony Garnock-Jones <tonyg at lshift.net> wrote:
>> Hi Ivan,
>>
>> I like the idea. I like it not only for HTTP but also for AMQP's native
>> wire protocol. I don't have time to work on it at the moment, but
>> perhaps we can discuss it here: do you have any concrete suggestions for
>> what it might look like? Maybe start with the HTTP setting and we can
>> generalise to the AMQP wire protocol later. And of course if you had a
>> prototype/proof-of-concept implementation, that'd be very welcome in
>> terms of getting the ball rolling :-)
>>
>> Regards,
>>  Tony
>>
>> Ivan Delchev wrote:
>>> Hi guys,
>>>
>>> I have a question about RabbitMQ and more specifically
>>> rabbitmq-jsonrpc. I know that this is an experimental download and is
>>> basically translation of AMQP to HTTP, but is there a way to optimize
>>> a typical process of e.g. authenticating yourself, declaring an
>>> exchange and declaring a queue? Currently this takes 7-8 requests in a
>>> row, which puts unnecessary load on the server. Does anyone know about
>>> "shortcut" HTTP requests that bundle multiple AMQP calls in one
>>> request in order to minimize overhead?
>>>
>>> @RabbitGuys Do you have any plans to implement and support such features?
>>>
>>>
>>> Thanks a lot,
>>> Ivan
>>>
>>> _______________________________________________
>>> rabbitmq-discuss mailing list
>>> rabbitmq-discuss at lists.rabbitmq.com
>>> http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
>>
>



More information about the rabbitmq-discuss mailing list