我正在使用amq的rabbitMQ服务器。
我遇到了一个棘手的问题。单独离开服务器大约10分钟后,连接就会丢失。
导致这种情况的原因是什么?
答案 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