0

JBOSS 5.1.0を使用しており、メッセージの保存にトピックを使用しています。そして、私たちのクライアントは、それらのメッセージを取得するための永続的なサブスクリプションを作成しています。

すべてが正常に機能していますが、1つの問題は、TCPクライアントからデータを取得し、それを処理してトピックに保持し、1秒あたり約10メッセージを送信し、クライアントが一度に1つのメッセージを読み取っているということです。その間には大きなギャップがあり、しばらくするとJBOSSトピックに多くのメッセージが表示され、メモリ不足と言ってクラッシュします。これに対する回避策はありますか?

4

1 に答える 1

0

基本的に、プロデューサーは、コンシューマーが処理できるよりも 10 倍多くのメッセージを生成しています。この状況が (ピーク時だけでなく) 安定している場合、これは機能しません。

プロデューサーが 1 秒あたり 1 つのメッセージのみを送信するように制限した場合 (これはもちろん可能です。たとえば、 check out RateLimiter)、プロデューサー側で余分なメッセージをどうしますか? トピックでキューに入れられていない場合は、プロデューサー側でキューに入れられます。

いくつかの選択肢があります:

  • メッセージをより速く処理するように何らかの方法でコンシューマーを調整して、トピックがいっぱいにならないようにする

  • 永続ストレージを使用するようにトピックを調整します。これははるかに優れています。トピックがすべてをメモリに保存するわけではないだけでなく、トランザクションの動作も発生する可能性があります (メッセージは永続的です)。

  • トピックに設定したいメッセージのキューを置き、毎秒 1 つのメッセージを処理します。そのキューは永続的である必要があり、トピックが現在保持できるよりも多くのメッセージを保持できる必要があります

于 2012-08-27T17:22:01.853 に答える