2012-10-01 9 views
5

(Java)Messaging &のトレードス​​タディを実行しています。主要なWebアプリケーション用のバックエンドフレームワークを今後再設計するためのキューイングシステム、x-largeインスタンス)。私は現在ActiveMQとRabbitMQを評価中です。Javaメッセージングとキューイングシステムで永続性を使用する場合

計画には、5つの異なるキューがあり、1つはデッドレターキューです。 1日あたりに送信されるメッセージの数は、40K〜400Kのいずれかになります。メッセージコンテンツがデータストア上のXMLファイルの場所へのポインタになることを計画しているので、メッセージは約64バイトと予想されます。しかし、評価のために、平均ファイルサイズが3KBの生のXMLをメッセージに送信することも検討したいと思います。

私の主な質問:毎日持続するメッセージの数/数/上記の金額を考慮して、すべてのメッセージを維持することは合理的ですか?永続化するとパフォーマンスが低下することは分かっています。しかし、永続化しないことによって、多くのRAMが使用されています。あなたは何をお勧めしますか?

また、私はActiveMQ(JMS)vs RabbitMQ(AMQP)に関する多くのオンライン情報があることを知っています。私は数多くの研究とテストを行ってきました。どちらの実装も私のニーズに合うようです。上記で提供した情報(ファイルサイズとメッセージ数)を考慮すると、私が見逃した可能性がある特定のベンダーを使用する理由を誰でも指摘できますか?

ありがとうございます!

答えて

2

日常的に持続されるメッセージ数は/いつですか?上記の金額I を考慮すると、 はすべてのメッセージを維持するのに妥当ですか?

JMS永続性はデータベースに代わるものではなく、データのプロデューサとコンシューマ間の短期間のバッファとみなされます。あなたが言及したメッセージの量/サイズは、現代のJMSシステムの永続性アダプタには課税されず(適切に設定されています)、必要に応じて長時間メッセージをバッファリングするために使用できます( reliable message store architectureを使用)。

私が知っていることは、パフォーマンスが低下している可能性があります。 しかし、永続化しないことによって、多くのRAMが使用されています。 何をお勧めしますか?

私の経験では、メッセージの永続化を有効にすることは重要なパフォーマンスヒットではなく、ほとんどの場合、メッセージを保証するために行われます。ほとんどのアプリケーションでは、上流(プロデューサ)または下流(コンシューマ)のプロセスがボトルネック(特にデータベースI/O)になります...ないJMSは、私はオンラインのRabbitMQ(AMQP)対 ActiveMQの(JMS)に関する情報がたくさんあることを知って、また店

永続性。私は研究のトンと テストを行っている。どちらの実装も私のニーズに合うようです。 上記で提供した情報(ファイルサイズとファイル数: )を考慮すると、特定のベンダーを使用する理由を誰かが指摘できますか? 私は見逃している可能性がありますか?

多くのプロジェクトで、低音量と大音量の両方のメッセージングにActiveMQをうまく使用しました。 Apache Camelのようなルーティングエンジンと合理化することをお勧めしますintegrationcomplex routing patterns

+0

私の質問にお答えいただきありがとうございます。 – littleK

3

メッセージングシステムは、一時的なストレージとして使用する必要があります。アプリケーションはできるだけ早くメッセージを引き出すように設計する必要があります。メッセージの数が多いほどパフォーマンスが低下します。あなたがメッセージを引っ張っているなら、パフォーマンスが良くなり、メモリ使用量も少なくなります。パフォーマンスが向上するようにメッセージがメモリに保持されるため、メモリが永続的であるかどうかは依然として使用されるかどうかは、メッセージ・タイプが永続的である場合のみディスクにバックアップされます。

メッセージの永続性の決定は、メッセージの重要度と、メッセージング・プロバイダーの再始動から生き残る必要があるかどうかによって決まります。

IBM WebSphere MQをご検討ください。それはあなたの要件を満たすことができます。これには、JMSだけでなく、アプリケーションを開発するための独自APIもあります。

0

ActiveMQは、オープンソースのJMSには適していますが、より高価なものはTIBCO EMSかSolaceです。

しかし、実際にはJMSは一度限りの配信用に構築されており、永続性が長くなると仕様から外れます。もちろん、データベースに行くこともできますが、それは重量が重くて高価になる可能性があります。

私は(注:私はCodeStreetのために働いています)私たちの 'ReplayService for JMS'です。高性能なファイルベースのディスク・ストレージに、あらゆるタイプのJMSメッセージ(またはWebSphere MQ固有のもの)を保管しましょう。各メッセージには、ナノ秒のタイムスタンプとglobalMsgIDが自動的に割り当てられ、パブリケーション時に上書きすることができます。したがって、XMLメッセージはReplayServerによって記録され、実際のメッセージには参照としてglobalMsgIDだけが含まれています。そしておそらくいくつかのプロパティ?

受信者がglobalMsgIDを受信すると、必要に応じてReplayServerからそのメッセージを再生できます。

しかし、ActiveMQなどでは、400K * 3KBのXMLメッセージを簡単に実行できます。また、送信する前にXMLメッセージを圧縮する必要があります。

関連する問題