8

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

我遇到了一个难题。将服务器单独放置约 10 分钟后,连接将丢失。

这可能是什么原因造成的?

4

2 回答 2

3

如果您查看 Erlang 客户端文档http://www.rabbitmq.com/erlang-client-user-guide.html,您将看到标题为Connecting To A Broker的部分

这为您提供了一些不同的选项,您可以在设置与 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

于 2013-03-04T09:39:11.790 回答
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();
于 2013-03-27T12:35:14.030 回答