[rabbitmq-discuss] does rabbitmq server close connections?

Alexandru Scvorţov alexandru at rabbitmq.com
Wed Jan 4 08:44:23 GMT 2012


> You're the expert, should it work? :)

This should work:

> > Enabling heartbeats (when connecting with a client) didn't help?
> > (heartbeats are the AMQP equivalent of TCP keep-alives)

Adding this to the rabbit entry in rabbitmq.config (yes, you also need
to respecify the default rabbit options) enables keep-alive on the
sockets.

{tcp_listen_options, [binary,
                     {packet, raw},
                     {reuseaddr, true},
                     {backlog, 128},
                     {nodelay, true},
                     {exit_on_close, false},
                     {keepalive, true}]}

I don't know whether this is enough to prevent your firewall from
terminating the "idle" connections.

Cheers,
Alex

On Tue, Jan 03, 2012 at 11:16:20AM -0500, Mark Steele wrote:
> You're the expert, should it work? :)
> 
> I haven't tested that out, hadn't occurred to me to try.
> 
> On Tue, Jan 3, 2012 at 11:06 AM, Alexandru Scvorţov
> <alexandru at rabbitmq.com>wrote:
> 
> > > We've been bitten by this with firewalls that close connections after
> > idle
> > > timeouts. Best solution I can come up with is to use TCP keepalives.
> >
> > Enabling heartbeats (when connecting with a client) didn't help?
> > (heartbeats are the AMQP equivalent of TCP keep-alives)
> >
> > > If you client supports setting TCP options during the connection, that's
> > > all you need to do for the client side part. For the server side, I
> > > couldn't find any options for this in the rabbit config, so we
> > implemented
> > > libkeepalive to force the server to use keepalives.
> > >
> > > Rabbit folks, please add this as an option to the server.
> >
> > I haven't tried, but I think you can enable keepalives in the
> > rabbitmq.config.  Just add a tcp_listen_options entry with {keepalive,
> > true}:
> >
> > [
> >        {rabbit, [{tcp_listen_options, [{keepalive, true}]}]}
> > ].
> >
> > http://www.rabbitmq.com/configure.html#config-items
> >
> > Wouldn't something like that work?
> >
> > Cheers,
> > Alex
> >
> > On Tue, Jan 03, 2012 at 10:47:43AM -0500, Mark Steele wrote:
> > > We've been bitten by this with firewalls that close connections after
> > idle
> > > timeouts. Best solution I can come up with is to use TCP keepalives.
> > >
> > > If you client supports setting TCP options during the connection, that's
> > > all you need to do for the client side part. For the server side, I
> > > couldn't find any options for this in the rabbit config, so we
> > implemented
> > > libkeepalive to force the server to use keepalives.
> > >
> > > Rabbit folks, please add this as an option to the server.
> > >
> > > Cheers,
> > >
> > > Mark Steele, CISSP, CSM
> > > Bering Media Inc.
> > >
> > > On Tue, Jan 3, 2012 at 9:41 AM, Alexandru Scvorţov
> > > <alexandru at rabbitmq.com>wrote:
> > >
> > > > > With 100's of computers connected to rabbitmq with persistent
> > > > connections,
> > > > > would this pose any problems?
> > > >
> > > > Not unless you run out of free file handles.  On normal installations,
> > > > it should handle up to thousands of connections without difficulty.
> >  You
> > > > could further configure it to support more connections.
> > > >
> > > > > Does it time-out by default?
> > > >
> > > > No.  Connections are not timed out.
> > > >
> > > > > Why use a heartbeat?  Is it to re-establish if the heartbeat fails?
> > > >
> > > > If the network fails between a client and the broker, and there's no
> > > > traffic between them at that point, both will think the connection is
> > > > still open, even though it isn't.  Heartbeats ensure that both broker
> > > > and client are notified fairly quickly if the connection fails.
> > > >
> > > > > Would it be better for clients to close connections and only open a
> > > > > connection when necessary?
> > > >
> > > > It depends on your use case.
> > > >
> > > > > For reading messages we need persistent connections.
> > > > > But for writing, and I can see how we could potentially only open a
> > > > > connection to write a message when required.
> > > >
> > > > For consuming messages *efficiently*, you need persistent connections.
> > > > If you only get messages very rarely, you could open a connection, poll
> > > > the broker with basic.get and then close the connection.  But, if you
> > > > need to consume a lot of messages, you probably want persistent
> > > > connections anyway.
> > > >
> > > > Hope this helps.
> > > >
> > > > Cheers,
> > > > Alex
> > > >
> > > > On Thu, Dec 29, 2011 at 05:21:26PM -0500, S Ahmed wrote:
> > > > > With 100's of computers connected to rabbitmq with persistent
> > > > connections,
> > > > > would this pose any problems?
> > > > >
> > > > > Does it time-out by default?
> > > > >
> > > > > Why use a heartbeat?  Is it to re-establish if the heartbeat fails?
> > > > >
> > > > > Would it be better for clients to close connections and only open a
> > > > > connection when necessary?
> > > > >
> > > > > For reading messages we need persistent connections.
> > > > >
> > > > > But for writing, and I can see how we could potentially only open a
> > > > > connection to write a message when required.
> > > >
> > > > > _______________________________________________
> > > > > rabbitmq-discuss mailing list
> > > > > rabbitmq-discuss at lists.rabbitmq.com
> > > > > https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
> > > >
> > > > _______________________________________________
> > > > rabbitmq-discuss mailing list
> > > > rabbitmq-discuss at lists.rabbitmq.com
> > > > https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
> > > >
> >


More information about the rabbitmq-discuss mailing list