1

アプリケーションで ActiveMQ 接続の問題が発生したときに発生する可能性のあるハングを軽減するために、アプリケーション内のブローカー接続文字列に次のパラメーターを追加することを検討しています。

?transport.requesttimeout=10000

このリソースによると、これはこれらのインシデントへの対処に役立つようです。

ただし、これを現在のフェールオーバー接続文字列で機能させることはできないようです。これは次のようになります。

failover:(tcp://masterbroker:61616,tcp://slavebroker:61616)?keepAlive=true

次のように追加します。

failover:(tcp://masterbroker:61616,tcp://slavebroker:61616)?keepAlive=true&transport.requesttimeout=10000

または、代わりに次のようにします。

failover:(tcp://masterbroker:61616?transport.requesttimeout=10000,tcp://slavebroker:61616?transport.requesttimeout=10000)?keepAlive=true

... どちらも NMS の例外または接続の失敗を引き起こすようです。

これは比較的些細な質問に思えるかもしれませんが、このタイプの接続文字列内でトランスポート固有のディレクティブを指定するにはどうすればよいでしょうか?

4

2 に答える 2

1

バージョン間で動作が異なる場合があるため、これらの質問をするときは、使用している NMS.ActiveMQ のバージョンを常に追加する必要があります。最新バージョンを使用していると仮定すると、ブローカーに接続しようとして約 10 秒後に実行されなかった場合、最初のフォームから NMSException が発生することが予想されます。フェイルオーバー構成の内部 URI に適用できる唯一のオプションは、呼び出されるトランスポートのタイプ (この場合は TCP) のためのオプションであるため、URI は無効です。

リクエスト タイムアウト オプションを適用している理由がよくわからないので、一歩下がって、ここで何を達成しようとしているのかを説明することをお勧めします。ほとんどの場合、このオプションはお勧めしません。

また、keepAlive オプションは、tcp トランスポートに適用されないため、ここでは影響を与えないため、無視されます。その tcp ソケットキープアライブを超えると、2 時間ごとに 1 回しか起動しないため、実際には役に立ちません。非アクティブモニターを無効にしない限り、tcp トランスポートは独自のハートビートを実行するため、keepAlive = true は必要ありません。

表示されている例外が何であるか、またはリクエストのタイムアウトで解決しようとしている問題についてさらに情報を提供できる場合は、おそらくあなたの質問によりよく答えることができます.

-ティム www.fusesource.com

于 2011-04-10T15:18:12.553 に答える