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

Ivan Delchev ivdelchev at gmail.com
Sun Mar 28 12:20:33 BST 2010


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