amqでrabbitMQサーバーを使用しています。
私は難しい問題を抱えています。サーバーを約 10 分間放置すると、接続が失われます。
何が原因でしょうか?
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();
Erlang クライアントのドキュメントhttp://www.rabbitmq.com/erlang-client-user-guide.htmlを見ると、 Connecting To A Brokerというタイトルのセクションが表示されます。
これにより、RabbitMQ サーバーへの接続をセットアップするときに指定できるいくつかの異なるオプションが提供されます。オプションの 1 つはです。heartbeat
デフォルトでは0
ハートビートが指定されていないことがわかります。
Erlang の正確な表記法はわかりませんが、次のようにする必要があります。
{ok, Connection} = amqp_connection:start(#amqp_params_network{heartbeat = 5})
ハートビート タイムアウトは秒単位で指定します。したがって、これにより、コンシューマーは 5 秒ごとにサーバーにハートビートを返します。
このディスカッションもご覧ください: https://groups.google.com/forum/?fromgroups=#!topic/rabbitmq-discuss/u227xzvqOr8