2017-11-02 4 views
1

現在、RabbitMQ(RabbitMQ 3.6.12、Erlang 19.2)の約60-150メッセージを消費するマイクロサービス(ノードv8.3.0)のプロトタイプを作成中です.1)。時にはそれは魅力のように機能し、残りのメッセージはキューにはありません。しかし、メッセージが滞っているほとんどの場合、1秒あたり5〜20メッセージしか処理されず、キューに3Mまでのメッセージが蓄積されます。AMQP /ノードを使用して1秒あたり100メッセージを処理する方法

ここでは、単一のコンシューマですべてのメッセージを処理する方法について本当に興味があります。遅延を伴わずにこれらすべてのメッセージを処理するJavaコンシューマーがすでに存在するためです。 amqplibに基づいてthis node libraryを使用します。さらに、ハンドラは着信メッセージを即座に確認します。ビジネスロジックは絶対に非同期です。したがって、ビジネスロジックがなくても、それは固執します。交換タイプはtopicであり、それはdurableではなく、キューにはauto-deleting機能が有効になっています。無効なプリフェッチ、プリフェッチ= 1100を成功させました。

..だから

1)あなたはノードのためのAMQP/RabbitMQのライブラリを使用していますか?
2)1秒あたりに処理されるメッセージの数はいくつですか?
3)これ以上の改善や提案はありますか?

ありがとうございます!

+1

統合コードがないと、これは本当に答えにくいです。 RabbitMQのようなAMQPサーバは通常、毎秒数百を超える処理を行うことができますが、これを実現するにはさらに多くのチャネルや接続が必要です。 – tadman

+0

https://github.com/lanetix/node-lanetix-amqp-easy#usage - 前述の例でも述べたような効果が発生します(connect + consume + console.log)。 1接続、1チャネル、1キュー。 – fheck

+0

異なるAMQPライブラリを試して、一度に複数のワーカーを実行してみてください。 – tadman

答えて

1

RabbitMQチームはthis mailing listを監視し、ときどきstackoverflowに関する質問に答えます。

正しく動作するJavaコンシューマを持っているという事実は、amqplib-easy,amqplib、またはあなたのコードを原因としています。また、RabbitMQの単一のキューを使用することは、パターンが反パターンであることに注意してください。これは、キューがブローカ内の並行性の単位であるためです。

READMEを含むtest projectを、RabbitMQ PerfTestアプリケーション(Java)を使用してノードコンシューマを実行することでまとめました。 PerfTestには、環境のパフォーマンス機能を評価するための多くの機能が備わっているため、よく理解しておく必要があります。

私のテスト環境では、4096 msg/secのパブリッシュレートを簡単に維持できます。私がそれを8192に増やすと、Node appが十分に速く消費できないという事実のために、メッセージがバックアップされるのを見ることができます。 「プレーン」amqplibも同様に比較すると面白いでしょう。

+0

あなたの返信には大変感謝しています! "プレーンな" amqplibとビジネスロジックでテストしよう!その結果をすぐに公表します:) – fheck

+0

は、 'rabbot'と組み合わせてテスト設定を試みました。最新のmacbook airで最大14kメッセージ/秒を処理します。ですから、 'amqplib-easy'はできるだけ速くはありません。次のステップ:ボトルネックを見つけてください。 – fheck

+1

あなたが見つけたものをお返事ありがとうございます。 [メーリングリスト](https://groups.google.com/forum/#!forum/rabbitmq-users)は、さらに質問がある場合は素晴らしいリソースです。 –

関連する問題