Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Connection in RabbitMQ server auto lost after 600s

I'm using rabbitMQ server with amq.

I am having a difficult problem. After leaving the server alone for about 10 min, the connection is lost.

What could be causing this?

like image 803
Hyeongsik Avatar asked Mar 01 '13 03:03

Hyeongsik


2 Answers

If you look at the Erlang client documentation http://www.rabbitmq.com/erlang-client-user-guide.html you will see a section titled Connecting To A Broker

This gives you a few different options that you can specify when setting up your connection to the RabbitMQ server, one of the options is the heartbeat, as you can see the default is 0 so no heartbeat is specified.

I don't know the exact Erlang notation, but you will need to do something like:

{ok, Connection} = amqp_connection:start(#amqp_params_network{heartbeat = 5})

The heartbeat timeout is specified in seconds. So this would cause your consumer to heartbeat back to the server every 5seconds.

Also take a look at this discussion: https://groups.google.com/forum/?fromgroups=#!topic/rabbitmq-discuss/u227xzvqOr8

like image 69
kzhen Avatar answered Oct 03 '22 22:10

kzhen


The default connection timeout for the RabbitMQ connection factory is 600 seconds (at least in the Java client API), hence your 10 minutes. You can change this by specifying to the connection factory your timeout of choice.

It is good practice to ensure your connection is release and recreated after a specific amount of time, to prevent eventual leaks and excessive resournces. Your code should ensure that it seeks a valid connection that is not close to be timed-out, and re-establish a new connection on the ones that did time-out. Overall, adopt a connection-pooling approach.

- Java example:

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost(this.serverName);
    factory.setPort(this.serverPort);
    factory.setUsername(this.userName);
    factory.setPassword(this.userPassword);
    factory.setConnectionTimeout( YOUR-TIMEOUT-IN-SECONDS ); 

    Connection = factory.newConnection();
like image 35
gextra Avatar answered Oct 03 '22 21:10

gextra