0

キュー内のメッセージを処理するコンシューマーを 1 つだけ作成するユース ケースがあります。メッセージ プロセッサは、確認応答する前に一定数のメッセージを蓄積します。非同期の方法でメッセージを受信し、Transacted セッションを使用します。メッセージのサイズは非常に小さいです。

アクティブ MQ は、一定数のメッセージが送信されると、単一のコンシューマーへのメッセージの送信を停止し、確認応答を待ちます。consumer.prefetchSizeconsumer.maximumPendingMessageLimitなどのソリューションを試しました。しかし、何も機能していません。サブスクライバーが 1 つだけの永続的なトピックで同様の使用例を試したところ、正常に動作しました。

同様のactivemqの問題/動作に遭遇した人はいますか? さまざまなフォーラムで言及されている多くのことを試しましたが、どれも役に立ちませんでした.

Activemq バージョン: ActiveMQ 5.6.0
キュー構成:永続キュー
コンシューマ:非同期で、確認モードとしてトランザクション セッションを使用

どんな助けや提案も大歓迎です。ありがとう。

4

1 に答える 1

1

プリフェッチ ポリシー、maxpagesize などのさまざまな activemq 属性を設定して、この問題を解決するためにさまざまな構成を試しましたが、どれも実際には役に立ちませんでした。@Jakeのコメントを参照することで、 JConsole経由で JMX を使用して activemq を監視することについて知りまし た。これは、activemq を監視および管理するための非常に便利なツールです。役に立つと思われる記事をいくつか紹介します。
1. activemq のモニタリング
2. JConsole を使用した activemq JMX の接続

キュー属性を監視することで、memoryLimit属性に非常に低い値が割り当てられていることがわかりました (わずか 1 MB)。属性の値を増やすと、問題が解決しました。JMS は確認応答を待たずにメッセージの送信を開始しました。

テスト目的で、conf/activemq.xml 構成ファイルのmemoryLimitの値を変更しました。

于 2013-08-01T16:51:25.960 に答える