我正在使用带有 amq 的 rabbitMQ 服务器。
我遇到了一个难题。将服务器单独放置约 10 分钟后,连接将丢失。
这可能是什么原因造成的?
如果您查看 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
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();