RabbitMQ服务器中的连接在600秒后自动丢失

时间:2013-03-01 03:52:21

标签: timeout rabbitmq

我正在使用amq的rabbitMQ服务器。

我遇到了一个棘手的问题。单独离开服务器大约10分钟后,连接就会丢失。

导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:3)

RabbitMQ连接工厂的默认连接超时 600秒(至少在Java客户端API中),因此您需要10分钟。您可以通过向连接工厂指定所选的超时来更改此设置。

优良作法是确保在特定时间后释放和重新创建连接,以防止最终泄漏和过度使用。您的代码应确保它寻找一个不接近超时的有效连接,并在那些超时的连接上重新建立新连接。总的来说,采用连接池方法。

- Java示例:

    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();

答案 1 :(得分:2)

如果查看Erlang客户端文档http://www.rabbitmq.com/erlang-client-user-guide.html,您会看到标题为连接到代理的部分

这为您提供了一些在设置与RabbitMQ服务器的连接时可以指定的选项,其中一个选项是heartbeat,因为您可以看到默认值为0所以没有心跳指定。

我不知道确切的Erlang符号,但你需要做类似的事情:

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

心跳超时以秒为单位指定。因此,这将导致您的消费者每隔5秒钟心跳回服务器。

另请参阅此讨论:https://groups.google.com/forum/?fromgroups=#!topic/rabbitmq-discuss/u227xzvqOr8