2013-03-01 15 views
5

私はamqでrabbitMQサーバーを使用しています。RabbitMQサーバーの接続が600秒後に自動的に失われる

私は困難な問題を抱えています。サーバーを約10分間だけ放置すると、接続は失われます。

この原因は何ですか?

+0

は、あなたが接続を作成するときに、ハートビート値を設定しようとしましたか? – kzhen

+0

@kzhen:どのようにハートビート値を設定しますか? – Hyeongsik

+0

あなたはどのクライアントを使用していますか? – kzhen

答えて

2

あなたはErlangのクライアントのマニュアルhttp://www.rabbitmq.com/erlang-client-user-guide.htmlを見ればあなたがブローカーこれはあなたの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

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

False。 2つのタイムアウトがあります.1つは保存されたサーバー側で、もう1つは 'Socket.new'に渡されたものです。後者のデフォルトは0 ==無限で、 'factory.setConnectionTimeout'によって制御されます。 – djechlin

関連する問題