[rabbitmq-discuss] Using rabbitmq-http2 (was: simple.publish over the JSON RPC interface)

Tony Garnock-Jones tonyg at lshift.net
Tue Aug 11 12:19:31 BST 2009

Nathan Gray wrote:
>>  1. the "session" timeout.
>>  2. a per-method-call timeout
> Ok, so if you set timeout 1 bigger than timeout 2 you get trouble,
> unless there's something else keeping the channel alive.

Hmm. There are two kinds of trouble:

 - the session closing when you want it kept open

 - individual blocking operations timing out, perhaps because the
   server is slow, or whatever other reason

To avoid the session closing, you have to poke it every
sessionTimeout-minus-epsilon. To avoid individual blocking operation
timeouts, you have to either make the server not take forever or set the
x-json-rpc-timeout longer.

Where they interact is in the case of the long-poll. The AMQP channel
object is set to deliberately not answer poll() requests until
sessionTimeout/2 has elapsed -- giving long-polling behaviour -- so in
the case of the poll() method, you want the x-json-rpc-timeout header to
let the operation take *at least* as long as sessionTimeout/2.

I did it that way because it's nice and simple, has fairly predictable
behaviour, and generally seemed like a reasonable first approach. Is
there a better way of doing it?

So in summary:

 - poll()'s request timeout needs to be sessionTimeout/2 + epsilon

 - blocking operation timeouts should be under user control but
   some reasonable default should exist

 - sessionTimeout should be under user control, but values less than
   about a minute are probably not a good idea, especially once the
   number of connections goes up? We haven't good data here.

... and of course I still need to make the changes we discussed
yesterday :-)

 [][][] Tony Garnock-Jones     | Mob: +44 (0)7905 974 211
   [][] LShift Ltd             | Tel: +44 (0)20 7729 7060
 []  [] http://www.lshift.net/ | Email: tonyg at lshift.net

More information about the rabbitmq-discuss mailing list