私たちのチームは、ActiveMQまたはRabbitMQのどちらかを選択するための急上昇中です。16個の文字列の配列、タイムスタンプ、および2つの整数を含むオブジェクトメッセージを送信する2つの小さなプロデューサー/コンシューマースパイクを作成しました。スパイクは開発者のマシンでは問題ありません(メッセージは十分に消費されています)。
それからベンチが来ました。私たちのマシンでは、多くのメッセージを送信しているときに、消費者が時々ぶら下がっていることに最初に気づきました。そこにありましたが、メッセージがキューに蓄積されていました。
ベンチプレートフォームに行ったとき:
- 2台のrabbitmqマシンのクラスター4コア/3.2Ghz、4Gb RAM、VIPによる負荷分散
- 1〜6人のコンシューマーがrabbitmqマシンで実行され、メッセージをmysql DB(DBと同じタイプのマシン)に保存します。
- 12台のASマシン(tomcat)で実行されている12人のプロデューサーが、別のマシンで実行されているjmeterで攻撃されました。同じ負荷のRabbitMQメッセージを生成するサーブレットでは、負荷は1秒あたり約600〜700のhttpリクエストです。
時々 、消費者がハングすることに気づきました(まあ、彼らはブロックされていませんが、彼らはもうメッセージを消費しません)。各コンシューマーがデータベースに約100msg/秒を保存するため、消費を停止すると、DBに保存される1秒あたりのメッセージ全体が同じ比率で減少することがわかります(たとえば、3人のコンシューマーが停止すると、約600msgに減少します。 /秒から300msg/秒)。
その間、プロデューサーは問題なく、jmeterレート(約600msg /秒)でプロデュースします。メッセージはキューにあり、まだ「生きている」消費者によって受け取られます。
最初にすべてのサーブレットをプロデューサーにロードしてから、すべてのコンシューマーを1つずつ起動し、接続に問題がないかどうかを確認してから、jmeterを実行します。
1つの直接取引所にメッセージを送信しています。すべてのコンシューマーは、交換にバインドされた1つの永続キューをリッスンしています。
その点が私たちの選択にとって重要です。これをrabbitmqで見たことがありますか?何が起こっているのかわかりますか?
ご回答ありがとうございます。