6

ActiveMQ サイトのこの構成ページによると、connection.sendTimeoutプロパティは次のとおりです。

Message Sends for a Responseを待機する時間。デフォルト値のゼロは、永久に待機することを示します。このクライアントが高速なプロデューサである場合、またはプロデューサの速度を落とさなければブローカがメモリ不足になるようなコンシューマがない場合、永久に待機することで、ブローカはこのクライアントからのメッセージをフロー制御できます。送信はブローカーによって確認されるため、Stomp クライアントには影響しません。(ActiveMQ-CPP 2.2.1 以降)

私はこれが何を意味するのか(そしてsendTimeoutプロパティが実際に何であるか/それが何をするのか)を解釈するのに苦労しています:

  • 「メッセージ送信」オブジェクトとは何ですか?
  • ActiveMQ が応答を待っているのはなぜですか? JMS 接続のサーバー側ではありませんか? リクエストを待つべきではありませんか?
  • 実際にタイムアウトするのは何ですか?いつ使用する必要がありますか?

前もって感謝します!

4

1 に答える 1

5

タイムアウトは、クライアントからブローカーへのメッセージの送信に影響します。送信が非同期でない場合、クライアントは、メッセージが受信されてメッセージ ストアに追加されたことを示す応答がブローカーから返されるのを待ちます。場合によっては、事前に設定されたメモリ制限の 1 つに達したためにブローカーがプロデューサー フロー制御を行った場合、これが長時間ブロックされることがあります。クライアント アプリケーションが送信の長い待機を許容できない場合は、MessageProducer::send が無期限にブロックされないように、このタイムアウトを構成できます。

Connection が alwaysSyncSend=true で構成されているか、MessageProducer が配信モードを Persistent に設定して送信しているため、メッセージは同期モードで送信されます。

一般に、ユースケースに一致する制限でブローカーを構成している場合、この設定を使用する必要はありません。

于 2013-03-09T22:25:21.797 に答える