javax.jmsを使用して Solace キュー ( A としましょう)からメッセージを読み取る Spring Boot ベースの Java アプリケーションがあります。次に、私のアプリケーションは、( DelayedQueue を使用して)各メッセージに個別に 10 秒の遅延を適用します。その 10 秒が経過したら、メッセージを別の Solace Queue ( B としましょう) にプッシュします。キュー A の初期メッセージが少ない場合でも、メッセージごとに適切な 10 秒の遅延を設定できますが、すべて正常に動作します。
しかし、私にとっての課題は、キュー A に膨大な数のメッセージがあり (通常、私のユース ケースで発生します)、アプリケーションを起動すると、メッセージが非常に高速にプルされることです (1 秒あたり 10 ~ 15K メッセージ)。これにより、アプリケーションがメモリ不足になります ( GC オーバーヘッド制限を超えました)。
質問:私の質問は、アプリケーションで消費速度を遅くする方法です。1 秒あたり約 2 ~ 3K のメッセージを処理できる方法はありますか? コードでいくつかの構成変更を行う必要がありますか? お知らせ下さい。
以下は私が試した設定ですが、役に立ちません。この後でも、私のアプリケーションは 1 秒あたり 12 ~ 15K のメッセージをプルします。
environment.put(SupportedProperty.SOLACE_JMS_CONSUMER_DEFAULT_FLOW_CONGESTION_LIMIT, 2000);
environment.put(SupportedProperty.SOLACE_JMS_CONSUMER_DISPATCHER_QUEUE_SIZE, 2000);
ヒープメモリ(初期:2GB、最大:4GB)を増やそうとしましたが、役に立ちません。
親切に助けてください。ありがとう!
PSここでは TTL を使用できません。アプリケーションのみを使用して行う必要があります。