2017-12-15 14 views
0

私はQpid Proron 0.18.1バージョンを使用しています。 idle_timeoutは、 connection.idle_timeout() : 15000のように出力されています。私はデフォルト値15000が設定されているコードに戻ってトレースすることができません。また、コンテナ内で次のように変更しているとき:Qpidプロトン:idle_timeout設定

c.connect(conn_url, co.idle_timeout(proton::duration::FOREVER)); 

これで1分後にブローカがタイムアウトしています。しかし、

c.connect(conn_url, co.idle_timeout(proton::duration::SECOND)); 

は、私は、これはブローカーがアイドル状態の秒後にタイムアウトしなければならないと思っていても全くブローカーのタイムアウトを作っていません。

誰かが私に約idle_timeout()を説明でき、デフォルト値を変更する可能性がある場合は、素晴らしいことでしょう。

ありがとうございます!私はこれについて多くを知らない

答えて

1

まず、AMQP アイドルTIMOUTに関するいくつかの一般的な情報:

私はあなたがIDLE_TIMEOUTをすることになっているかについての誤解を持っているかもしれないと思いますdo(名前は少し誤解を招く可能性があります)。

この設定は、接続しているピアがまだソケットレベルで接続されていても応答を停止したことを検出するためのものです。使用されているタイムアウト値は、相手があなたに応答しなくなったことを検出するのを待つ時間によって設定する必要があります。

あなたが接続している相手がidle_timeout期間内に少なくとも1つのAMQPフレームを送信することを要求します。メッセージ転送などのためにフレームが送信されていない場合は、空のフレームを送信する必要があります。通常、ピアは、ネットワーク状態が偽のタイムアウトにならないように、キープアライブまたはハートビートフレームをアイドルタイムアウト期間の半分で送信します。

また、通信の各半分には独自のアイドルタイムアウト値があることを知っておくことも重要です。つまり、クライアントからブローカへの通信には、他の方向の通信とは異なるアイドルタイムアウト値が設定されます。あなたの特定の質問を見て今

私はQpid Proronに0.18.1のバージョンを使用しています。 idle_timeoutは、connection.idle_timeout():15000のように出力されています。デフォルト値15000が設定されているコードにはトレースバックできません。

あなたがここで見ていると、接続の反対側で設定されたIDLE_TIMEOUT値です。これは、15秒ごとに少なくとも1つのフレームを送信するようにプロトン実装を指示しているか、接続がタイムアウトしたとみなします。これは、使用しているC++実装で何もしなくても発生します。

c.connect(conn_url, co.idle_timeout(proton::duration::FOREVER));

これは分後にブローカーの時間を作っています。

何ここでコードがやっていることは事実上あらゆるキープアライブフレームを送信しないようにブローカーを語っている - デフォルトがフレームを送信することはないとして、それは、実際にすべてのプロパティを設定しないと同じです。

私はこれがブローカのタイムアウトを作っていないと確信しています。私が上で説明したように、これに対して間違った方向にアイドルタイムアウトを設定しています。私はそれが完全に別の設定をしていると思います。なぜなら、あなたは何もしなかったし、リソースを節約したいからです。私はAzure Servicebusがこれを行うことを思い出しています。

c.connect(conn_url, co.idle_timeout(proton::duration::SECOND));

私は、これはブローカーがアイドル状態の秒後にタイムアウトしなければならないと思っていても全くブローカーのタイムアウトを作っていません。

これは、1秒ごとに少なくとも1つのフレームを送信するように指示しており、1秒間に何も起こらなければブローカに切断を知らせるものではありません。以前と同じブローカーを使用している場合、同じ分後にタイムアウトしない理由はわかりませんが、いずれにしても、ブローカに何か悪いことが起きた場合にはタイムアウトになります。

0

次のように、しかし、私が発見したこと、であるこのことができます願ってい...

Q.誰かがについて私に説明できる場合、それは素晴らしいことですidle_timeout()と デフォルト値を変更する可能性がある場合。

IDLE_TIMEOUT()以下説明:アイドルタイムアウトを設定

デフォルトではタイムアウトはありません。

このフラグが設定されている場合、ローカルピアは、AMQPフレーム をdurationよりも長い時間受信しないと切断します。 「ハートビート」とも呼ばれる これは、ライブTCP 接続の存在下でも死んだピアを検出する方法です。

参考:Qpid Proton C++ API - idle_timeout()(15/12月/ 2017)

そのデフォルト値を変更し

接続を作成するためのオプション。

オプションは、次のように "連鎖" させることができる。

C = container.connect(URL、connection_options()ハンドラ(H).max_frame_size(1234))。

connection_options opts; 
opts.idle_timeout(1000).max_frame_size(10000); 
c1 = container.connect(url1, opts.handler(h1)); 
c2 = container.connect(url2, opts.handler(h2)); 

通常値のセマンティクス: また、共通の設定を持つオブジェクトとほとんど同じ設定を持つ異なる接続のためのベースとしてそれを使用するオプションを作成することができますコピーしたり割り当てるオプションの別のコピーを作成します。

参考:Qpid Proton C++ API - connection_options & idle_timeout(15/12月/ 2017)

+0

これは残念ながら私の質問に答えなかった。私はこれを通過しましたが、私はより多くの洞察を求めています。 – Mooni

+0

@Mooni、後悔するよりわからない 、私はあなたがすでに "IMMEDIATE" OR "SECOND" を試してみましたし、含まれていると仮定しています: の#include と する#include BH7

関連する問題